题干

视频游戏“辐射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 的下一个字符(下一阶段), 直至完成所有拼写。


输入: ring = “godding”, key = “gd”
输出: 4
解释:
对于 key 的第一个字符 ‘g’,已经在正确的位置, 我们只需要1步来拼写这个字符。
对于 key 的第二个字符 ‘d’,我们需要逆时针旋转 ring “godding” 2步使它变成 “ddinggo”。
当然, 我们还需要1步进行拼写。
因此最终的输出是 4。
提示:

ring 和 key 的字符串长度取值范围均为 1 至 100;
两个字符串中都只有小写字符,并且均可能存在重复字符;
字符串 key 一定可以由字符串 ring 旋转拼出。

想法

这道题没完成,抄的题解

Java代码

class Solution {public int findRotateSteps(String ring, String key) {int n = ring.length(), m = key.length();List<Integer>[] pos = new List[26];for (int i = 0; i < 26; ++i) {pos[i] = new ArrayList<Integer>();}for (int i = 0; i < n; ++i) {pos[ring.charAt(i) - 'a'].add(i);}int[][] dp = new int[m][n];for (int i = 0; i < m; ++i) {Arrays.fill(dp[i], 0x3f3f3f);}for (int i : pos[key.charAt(0) - 'a']) {dp[0][i] = Math.min(i, n - i) + 1;}for (int i = 1; i < m; ++i) {for (int j : pos[key.charAt(i) - 'a']) {for (int k : pos[key.charAt(i - 1) - 'a']) {dp[i][j] = Math.min(dp[i][j], dp[i - 1][k] + Math.min(Math.abs(j - k), n - Math.abs(j - k)) + 1);}}}return Arrays.stream(dp[m - 1]).min().getAsInt();}
}

leetcode【每日一题】514. 自由之路 Java【待完成相关推荐

  1. 【Leetcode 每日一题】514. 自由之路(BFS+优先队列)

    Leetcode 每日一题 题目链接:514. 自由之路 难度: 困难 解题思路: 这道题乍一看,可以选择用动态规划或者BFS来求解.本文使用BFS来进行解答.注意到题中有一个最小的到路径.所以我们可 ...

  2. leetcode:514. 自由之路

    题目来源 leetcode:514. 自由之路 题目描述 class Solution {public:int findRotateSteps(string ring, string key) {} ...

  3. leetcode每日刷题计划-简单篇day8

    leetcode每日刷题计划-简单篇day8 今天是纠结要不要新买手机的一天QAQ想了想还是算了吧,等自己赚钱买,加油 Num 70 爬楼梯 Climbing Stairs class Solutio ...

  4. Leetcode每日一题:171.excel-sheet-column-number(Excel表列序号)

    思路:就是168题的反命题,进制的方式完美解决: Leetcode每日一题:168.excel-sheet-column-title(Excel表名称) class Solution {public: ...

  5. 【LeetCode每日一题】1723. 完成所有工作的最短时间

    [LeetCode每日一题]1723. 完成所有工作的最短时间 [1] 1723. 完成所有工作的最短时间 [2] 473. 火柴拼正方形 [1] 1723. 完成所有工作的最短时间 题目: 给你一个 ...

  6. leetcode每日一题--雀巢原理;抽屉算法;Quorum机制;分布式应用

    leetcode每日一题 539. 最小时间差 示例 1: 输入:timePoints = ["23:59","00:00"] 输出:1 示例 2: 输入:ti ...

  7. LeetCode每日一题——1812. 判断国际象棋棋盘中一个格子的颜色

    LeetCode每日一题系列 题目:1812. 判断国际象棋棋盘中一个格子的颜色 难度:简单 文章目录 LeetCode每日一题系列 题目 示例 思路 题解 题目 给你一个坐标 coordinates ...

  8. 【LeetCode每日一题】——109.有序链表转换二叉搜索树

    文章目录 一[题目类别] 二[题目难度] 三[题目编号] 四[题目描述] 五[题目示例] 六[题目提示] 七[解题思路] 八[时间频度] 九[代码实现] 十[提交结果] 一[题目类别] 二叉树 二[题 ...

  9. leetcode每日一题·救生艇问题(Python)

    leetcode每日一题·救生艇问题(Python) 问题描述 题目入口 题目思路 首先分析问题,一个船最多坐两人,因此我们可以把这个问题看作两两组合的问题,并且如果最重的那个人和最轻的人加起来大于l ...

最新文章

  1. struts2登录后返回登录前的页面
  2. [ASP.NET 控件实作 Day28] 图形验证码控件
  3. Python3 正则表达式特殊符号及用法(详细列表)
  4. P1192 台阶问题(递推)
  5. 对esp和ebp分析来了解函数的调用过程
  6. imread函数_MATLAB图像处理:27:使用imtranslate函数平移图像
  7. 在Docker中安装和部署MongoDB集群
  8. 第八讲 拍卖的博弈分析练习题
  9. 21复变函数的积分(七)
  10. linux如何解除密码锁屏图案大全,忘记锁屏图案密码的六种解决办法
  11. html横向导航二级菜单代码,横向二级导航菜单
  12. TCR+fc型svc无功补偿仿真模型有详细资料
  13. Android设置应用数字角标
  14. 陀螺专访 | 元征科技CIO:疫情加速维修行业数字化进程
  15. mpvue 开发教程
  16. 博通Broadcom SDK源码学习与开发3——Cable Modem Docsis3.0
  17. 解决office你的许可证并非正版,你可能是盗版软件的受害者问题
  18. 如何做高中语文阅读理解,答案在这里
  19. java沙漏_Java - 沙漏
  20. 交流伺服电机的刚性浅析

热门文章

  1. 首席新媒体运营黎想教程:产品运营怎么使用思维导图?
  2. 【Java系列】深入解析Java多线程
  3. linux虚拟机安装过程中卡在mount: block device /dev/sr0 is write-protected, mounting read-only
  4. pse文本行检测_CVPR 2019 | 文本检测算法PSENet解读与开源实现
  5. 三轮DES差分攻击(免费完整代码)
  6. vue3+howler.js实现音频播放,兼容大多数音频格式
  7. 少壮不努力,ChatGPT来代替!
  8. Mybatis 子查询
  9. Arm汇编学习笔记(一)——编写编译并执行简单汇编文件
  10. SICP ex 1-27