leetcode514. 自由之路(dp)

电子游戏“辐射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。

代码

class Solution {public int findRotateSteps(String ring, String key) {int n=key.length(),m=ring.length();int[][] dp=new int[n][m];List<Integer> [] temp=new ArrayList[26];for(int i=0;i<26;i++)temp[i]=new ArrayList<>();for(int i=0;i<m;i++){temp[ring.charAt(i)-'a'].add(i);}//记录相同字母在ring中出现的位置for (int i=0;i<n;i++)Arrays.fill(dp[i],0x3f3f3f);for(int c:temp[key.charAt(0)-'a'])dp[0][c]=Math.min(c,m-c)+1;//初始化第一步可能的移动for(int i=1;i<n;i++)for(int j:temp[key.charAt(i)-'a'])//遍历这一步可能到达的位置for(int k:temp[key.charAt(i-1)-'a'])//遍历上一步所有可能停留的位置dp[i][j]= Math.min(dp[i][j],Math.min(Math.abs(j-k), m-Math.abs(j-k))+1+dp[i-1][k]);int min=Integer.MAX_VALUE;for(int i=0;i<m;i++)min=Math.min(min,dp[n-1][i]);return min;}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/392674.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java实现递归算法_如何在Java中实现二进制搜索算法而无需递归

java实现递归算法by javinpaul由javinpaul 流行的二进制搜索算法的迭代实现&#xff0c;用于在排序数组中查找元素。 (An Iterative implementation of the popular binary search algorithm to find an element in a sorted array.) Hello everyone! I have published a lot …

Django 入门项目案例开发(中)

关注微信公众号&#xff1a;FocusBI 查看更多文章&#xff1b;加QQ群&#xff1a;808774277 获取学习资料和一起探讨问题。 昨天已经描述了如何搭建Django的开发环境&#xff0c;今天描述业务流程&#xff0c;具体我们要实现一个什么样的业务&#xff1b; 以下的业务都是假设的…

纵横公路造价软件学习_通辽分公司组织开展2020年 养护工程造价预算培训

为进一步提高养护员工业务水平和业务素质&#xff0c;提升熟练掌握信息化公路工程造价预算&#xff0c;11月5日&#xff0d;11月8日期间,通辽分公司组织开展了2020年养护工程造价预算培训。养护科全体人员、基层所站统计人员共计16人参加培训。本次培训邀请了纵横公路工程造价管…

java 生成二维码

一步一步用 java 设计生成二维码 转至 http://blog.sina.com.cn/s/blog_5a6efa330102v1lb.html 在物联网的时代&#xff0c;二维码是个很重要的东西了&#xff0c;现在无论什么东西都要搞个二维码标志&#xff0c;唯恐落伍&#xff0c;就差人没有用二维码识别了。也许有一天生分…

leetcode 922. 按奇偶排序数组 II(双指针)

给定一个非负整数数组 A&#xff0c; A 中一半整数是奇数&#xff0c;一半整数是偶数。 对数组进行排序&#xff0c;以便当 A[i] 为奇数时&#xff0c;i 也是奇数&#xff1b;当 A[i] 为偶数时&#xff0c; i 也是偶数。 你可以返回任何满足上述条件的数组作为答案。 示例&a…

机器学习 深度学习 ai_如何突破AI炒作成为机器学习工程师

机器学习 深度学习 aiI’m sure you’ve heard of the incredible artificial intelligence applications out there — from programs that can beat the world’s best Go players to self-driving cars.我敢肯定&#xff0c;您已经听说过令人难以置信的人工智能应用程序-从可…

arcgis插值不覆盖区划图_ArcGIS绘图—空气质量站点数据插值绘制等值线图

作者&#xff1a;吴琳&#xff1b;陈天舒&#xff0c;山东大学环境科学&#xff08;大气化学&#xff09;博士在读数据&#xff08;Excel格式&#xff09;&#xff1a;多站点污染物数据&#xff08;国&#xff0c;省&#xff0c;市控点&#xff09;&#xff0c;站点经纬度信息绘…

数字校验

1 function validNumber(fieldname,fielddesc){2 var value $.trim($("#key_"fieldname).val());3 var num /^([0-9.])$/;4 5 var flag num.test(value);6 if(!flag) {7 alert("【"fielddesc"】只能输入数字");8 …

JavaScript覆盖率统计实现

主要需求 1、 支持browser & nodejs 由于javascript既能够在浏览器环境执行&#xff0c;也能够在nodejs环境执行&#xff0c;因此须要能够统计两种环境下单元測试的覆盖率情况。 2、 透明、无缝 用户写单元測试用例的时候&#xff0c;不须要为了支持覆盖率统计多写代码&…

leetcode 328. 奇偶链表(双指针)

给定一个单链表&#xff0c;把所有的奇数节点和偶数节点分别排在一起。请注意&#xff0c;这里的奇数节点和偶数节点指的是节点编号的奇偶性&#xff0c;而不是节点的值的奇偶性。 请尝试使用原地算法完成。你的算法的空间复杂度应为 O(1)&#xff0c;时间复杂度应为 O(nodes)…

NSLog打印当前文件,当前函数,当前行数

NSLog(”%s, %s, %d”, __FILE__, __FUNCTION__, __LINE__); 转载于:https://www.cnblogs.com/shenfei2031/archive/2011/08/06/2129636.html

单元格内容分列多行_姓名太多,放在一列打印时浪费纸张,可以分成多行多列打印...

在日常工作中&#xff0c;往往会碰到这种情况(如下图)&#xff1a;只有一列数据&#xff0c;而且比较多&#xff0c;如果打印起来就浪费纸张&#xff0c;然后复制、粘贴把表格变成几列&#xff0c;方便打印。今天小编和大家分享不用复制、粘贴&#xff0c;就能快速完成一列分成…

caesar加密_如何编写Caesar密码:基本加密简介

caesar加密by Brendan Massey由布伦丹梅西(Brendan Massey) The Caesar Cipher is a famous implementation of early day encryption. It would take a sentence and reorganize it based on a key that is enacted upon the alphabet. Take, for example, a key of 3 and th…

Java中接口、抽象类与内部类学习

2019独角兽企业重金招聘Python工程师标准>>> Java中接口、抽象类与内部类学习 接口与内部类为我们提供了一种将接口与实现分离的更加结构化的方法。 抽象类和抽象方法 抽象方法&#xff1a;仅有声明而没有方法体。 抽象类&#xff1a;包含一个或多个抽象方法的类&am…

leetcode 402. 移掉K位数字(贪心算法)

给定一个以字符串表示的非负整数 num&#xff0c;移除这个数中的 k 位数字&#xff0c;使得剩下的数字最小。 注意: num 的长度小于 10002 且 ≥ k。 num 不会包含任何前导零。 示例 1 : 输入: num “1432219”, k 3 输出: “1219” 解释: 移除掉三个数字 4, 3, 和 2 形成…

javascript 自定义Map

迁移时间&#xff1a;2017年5月25日08:24:19 Author:Marydon 三、自定义Map数据格式 需特别注意的是&#xff1a; js中没有像java中的Map数据格式&#xff0c;js自带的map()方法用于&#xff1a;返回一个由原数组中的每个元素调用一个指定方法后的返回值组成的新数组。 map()使…

gif分解合成_如何通过分解和合成使复杂的问题更容易

gif分解合成Discover Functional JavaScript was named one of the best new Functional Programming books by BookAuthority!“发现功能JavaScript”被BookAuthority评为最佳新功能编程书籍之一 &#xff01; Our natural way of dealing with complexity is to break it in…

vs2005 新建项目一片空白

最近在研究 workflow fundation ,但是在安装了他的extensions之后&#xff0c;发现VS2005 新建项目一片空白&#xff0c;除开workflow其他的项目模板全部丢失&#xff0c;新建项目对话框中空空如也。查阅资料后发现&#xff0c;可以通过 命令 devenv.exe /InstallVSTemplates 来…

docker导入镜像 liunx_docker扫盲?面试连这都不会就等着挂吧

推荐阅读&#xff1a;java喵&#xff1a;6大面试技能树&#xff1a;JAVA基础JVM算法数据库计算机网络操作系统​zhuanlan.zhihu.com一只Tom猫&#xff1a;都是“Redis惹的祸”&#xff0c;害我差点挂在美团三面&#xff0c;真是“虚惊一场”&#xff01;​zhuanlan.zhihu.com现…

crontab里shell脚本将top信息写入文件

crontab里shell脚本将top信息写入文件&#xff1a; 注&#xff1a; 1、top -n 1代表执行1次退出&#xff08;默认top是不退出的&#xff09;,-d 1代表每1秒执行1次 2、crontab里需加/bin/bash # crontab -e */5 * * * * /bin/bash /usr/local/bin/top.sh # vi top.sh #!/bin/ba…