leetcode 动态规划 514. 自由之路
电子游戏“辐射4”中,任务“通向自由”要求玩家到达名为“Freedom Trail Ring”的金属表盘,并使用表盘拼写特定关键词才能开门。
给定一个字符串 ring,表示刻在外环上的编码;给定另一个字符串 key,表示需要拼写的关键词。您需要算出能够拼写关键词中所有字符的最少步数。
最初,ring 的第一个字符与12:00方向对齐。您需要顺时针或逆时针旋转 ring 以使 key 的一个字符在 12:00 方向对齐,然后按下中心按钮,以此逐个拼写完 key 中的所有字符。
旋转 ring 拼出 key 字符 key[i] 的阶段中:
您可以将 ring 顺时针或逆时针旋转一个位置,计为1步。旋转的最终目的是将字符串 ring 的一个字符与 12:00 方向对齐,并且这个字符必须等于字符 key[i] 。
如果字符 key[i] 已经对齐到12:00方向,您需要按下中心按钮进行拼写,这也将算作 1 步。按完之后,您可以开始拼写 key 的下一个字符(下一阶段), 直至完成所有拼写。
示例:
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/freedom-trail
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
很难想的一道dp
主要问题是很难想状态转移方程,以及如何构建dp矩阵。 给出两个序列 ring 和 key,我想到了dp矩阵应该用二维,而且第一维 i i i应该用来描述已经拼写完成的字符的下标。剩下的就不知道了。
题解中是这样描述的:
定义 d p [ i ] [ j ] dp[i][j] dp[i][j] 表示从前往后拼写出 k e y key key 的第 i i i 个字符时, r i n g ring ring 的第 j j j 个字符与 12:00 方向对齐的最少步数(下标均从 0 开始)。
这里注意,比如当key的第i个字符s被拼写完成时,ring 对应12点的字符必定也是s,只不过ring上可能有多个s,且s在ring 上的下标随意。
因此,在dp矩阵中,一行不能全部遍历,因为有的位置是达不到的。所以在循环的时候,内层的循环不是从0到结束的。
完整题解:
class Solution {public:unsigned abs(unsigned a) {return a > 0 ? a : -a;}unsigned min(unsigned a, unsigned b) {return a < b ? a : b;}unsigned findRotateSteps(string ring, string key) {unsigned rl = ring.size();unsigned kl = key.size();unsigned dp[103][103];vector<unsigned> pos[26];for (unsigned i=0;i<rl;++i) {pos[ring[i]-'a'].push_back(i);}memset(dp, 0x7f, sizeof(dp));for (auto& i : pos[key[0]-'a']) {dp[0][i] = min(i, rl-i) + 1;}for(unsigned i=1;i<kl;++i) {// for (int j=0;j<rl;++j) { 这样写是错的for (auto& j : pos[key[i]-'a']) {for (auto& k : pos[key[i-1]-'a']) {dp[i][j] = min(dp[i][j], dp[i-1][k] + min(abs(j-k), rl-abs(j-k)) + 1);}}}unsigned ans = 999999999;for (unsigned i=0;i<rl;++i) {if (dp[kl-1][i] < ans)ans = dp[kl-1][i];}return ans;}
};
leetcode 动态规划 514. 自由之路相关推荐
- leetcode:514. 自由之路
题目来源 leetcode:514. 自由之路 题目描述 class Solution {public:int findRotateSteps(string ring, string key) {} ...
- 【Leetcode 每日一题】514. 自由之路(BFS+优先队列)
Leetcode 每日一题 题目链接:514. 自由之路 难度: 困难 解题思路: 这道题乍一看,可以选择用动态规划或者BFS来求解.本文使用BFS来进行解答.注意到题中有一个最小的到路径.所以我们可 ...
- LeetCode 514. 自由之路(记忆化递归 / DP)
文章目录 1. 题目 2. 解题 1. 题目 电子游戏"辐射4"中,任务"通向自由"要求玩家到达名为"Freedom Trail Ring" ...
- leetcode【每日一题】514. 自由之路 Java【待完成
题干 视频游戏"辐射4"中,任务"通向自由"要求玩家到达名为"Freedom Trail Ring"的金属表盘,并使用表盘拼写特定关键词才能 ...
- leecode 514. 自由之路
题目描述 电子游戏"辐射4"中,任务 "通向自由" 要求玩家到达名为 "Freedom Trail Ring" 的金属表盘,并使用表盘拼写特 ...
- 【LeetCode】自由之路 [H](记忆化搜索)
514. 自由之路 - 力扣(LeetCode) 一.题目 电子游戏"辐射4"中,任务 "通向自由" 要求玩家到达名为 "Freedom Trail ...
- LeetCode_514_自由之路
题目:自由之路 难度:困难 514.自由之路 电子游戏"辐射4"中,任务"通向自由"要求玩家到达名为"Freedom Trail Ring" ...
- 卖萌屋算法岗面试手册上线!通往面试自由之路
一只小狐狸带你解锁 炼丹术&NLP 秘籍 作为算法工程师,基础知识的重要性自然不必多说.虽然在有些项目中比较难感受到基础的作用,但扎实的coding能力,对算法本质和适用情况的理解,始终是决定 ...
- Leetcode动态规划部分典型题目分类及总结
参考内容 https://leetcode-cn.com/problems/longest-palindromic-substring/solution/zhong-xin-kuo-san-dong- ...
最新文章
- 【高并发、高性能、高可用】系统设计经验分享!
- 道家遁甲式(又名道家奇门)
- 多线程:Immutable对象?如何创建Immutable对象?
- java异步处理_SpringBoot异步开发之异步请求,在高并发的情况下,提高性能
- 微信小程序 长按图片不出现菜单_微信小程序实现长按删除图片的示例
- 前端学习(2305):react之脚手架基本创建
- 推出云游戏解决方案后,腾讯在这场沙龙上还说了什么?
- 使用SpringMVC模拟文件上传与下载案例
- 如何应对被地下的Oracle口令加密算法(2)
- d盘信号灯超时时间已到_20下教师资格证笔试成绩什么时候公布?今年面试是什么时候?这些时间节点抢先了解!...
- 泛微协同商务系统办公自动化解决方案
- 期末考试之排名次java_2020超星尔雅《JavaWeb应用开发》期末测试答案
- java当前时间增加一小时怎么写
- coreldraw怎么扣圆形_coreldraw如何抠图?coreldraw抠图图文教程
- 路由器怎么设置WiFi短信认证?
- php sftp上传图片,SFTP远道文件上传
- 【Spark】SparkStreaming-流处理-规则动态更新-解决方案
- 交通灯 单片机课程设计
- 记某XXB系统一次性能优化
- 计算机控制电梯如需改变功能 则,电梯维修项目教程 教学课件 作者 孙文涛附加答案试卷综合实训三模拟试题(13).doc...