leetcode【每日一题】514. 自由之路 Java【待完成
题干
视频游戏“辐射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【待完成相关推荐
- 【Leetcode 每日一题】514. 自由之路(BFS+优先队列)
Leetcode 每日一题 题目链接:514. 自由之路 难度: 困难 解题思路: 这道题乍一看,可以选择用动态规划或者BFS来求解.本文使用BFS来进行解答.注意到题中有一个最小的到路径.所以我们可 ...
- leetcode:514. 自由之路
题目来源 leetcode:514. 自由之路 题目描述 class Solution {public:int findRotateSteps(string ring, string key) {} ...
- leetcode每日刷题计划-简单篇day8
leetcode每日刷题计划-简单篇day8 今天是纠结要不要新买手机的一天QAQ想了想还是算了吧,等自己赚钱买,加油 Num 70 爬楼梯 Climbing Stairs class Solutio ...
- Leetcode每日一题:171.excel-sheet-column-number(Excel表列序号)
思路:就是168题的反命题,进制的方式完美解决: Leetcode每日一题:168.excel-sheet-column-title(Excel表名称) class Solution {public: ...
- 【LeetCode每日一题】1723. 完成所有工作的最短时间
[LeetCode每日一题]1723. 完成所有工作的最短时间 [1] 1723. 完成所有工作的最短时间 [2] 473. 火柴拼正方形 [1] 1723. 完成所有工作的最短时间 题目: 给你一个 ...
- leetcode每日一题--雀巢原理;抽屉算法;Quorum机制;分布式应用
leetcode每日一题 539. 最小时间差 示例 1: 输入:timePoints = ["23:59","00:00"] 输出:1 示例 2: 输入:ti ...
- LeetCode每日一题——1812. 判断国际象棋棋盘中一个格子的颜色
LeetCode每日一题系列 题目:1812. 判断国际象棋棋盘中一个格子的颜色 难度:简单 文章目录 LeetCode每日一题系列 题目 示例 思路 题解 题目 给你一个坐标 coordinates ...
- 【LeetCode每日一题】——109.有序链表转换二叉搜索树
文章目录 一[题目类别] 二[题目难度] 三[题目编号] 四[题目描述] 五[题目示例] 六[题目提示] 七[解题思路] 八[时间频度] 九[代码实现] 十[提交结果] 一[题目类别] 二叉树 二[题 ...
- leetcode每日一题·救生艇问题(Python)
leetcode每日一题·救生艇问题(Python) 问题描述 题目入口 题目思路 首先分析问题,一个船最多坐两人,因此我们可以把这个问题看作两两组合的问题,并且如果最重的那个人和最轻的人加起来大于l ...
最新文章
- struts2登录后返回登录前的页面
- [ASP.NET 控件实作 Day28] 图形验证码控件
- Python3 正则表达式特殊符号及用法(详细列表)
- P1192 台阶问题(递推)
- 对esp和ebp分析来了解函数的调用过程
- imread函数_MATLAB图像处理:27:使用imtranslate函数平移图像
- 在Docker中安装和部署MongoDB集群
- 第八讲 拍卖的博弈分析练习题
- 21复变函数的积分(七)
- linux如何解除密码锁屏图案大全,忘记锁屏图案密码的六种解决办法
- html横向导航二级菜单代码,横向二级导航菜单
- TCR+fc型svc无功补偿仿真模型有详细资料
- Android设置应用数字角标
- 陀螺专访 | 元征科技CIO:疫情加速维修行业数字化进程
- mpvue 开发教程
- 博通Broadcom SDK源码学习与开发3——Cable Modem Docsis3.0
- 解决office你的许可证并非正版,你可能是盗版软件的受害者问题
- 如何做高中语文阅读理解,答案在这里
- java沙漏_Java - 沙漏
- 交流伺服电机的刚性浅析
热门文章
- 首席新媒体运营黎想教程:产品运营怎么使用思维导图?
- 【Java系列】深入解析Java多线程
- linux虚拟机安装过程中卡在mount: block device /dev/sr0 is write-protected, mounting read-only
- pse文本行检测_CVPR 2019 | 文本检测算法PSENet解读与开源实现
- 三轮DES差分攻击(免费完整代码)
- vue3+howler.js实现音频播放,兼容大多数音频格式
- 少壮不努力,ChatGPT来代替!
- Mybatis 子查询
- Arm汇编学习笔记(一)——编写编译并执行简单汇编文件
- SICP ex 1-27