【Leetcode 514】自由之路 —— 动态规划

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

示例 1:

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

示例 2:

输入: ring = “godding”, key = “godding”
输出: 13

题目分析

经典动态规划问题,更多案例可见 Leetcode 动态规划详解

我们可以使用动态规划解决本题,解题思路:

  1. 状态定义:
    • dp[i][j] 表示 key 的第 i 个字符, ring 的第 j 个字符与 12:00 方向对齐的最少步数
    • pos[i] 表示字符 i 在 ring 中出现的位置集合,用来加速计算转移的过程
  2. 状态转移方程:枚举上一次与12:00方向对齐的位置k,此次需要从位置k旋转到位置j

d p [ i ] [ j ] = min ⁡ k ∈ p o s [ k e y [ i − 1 ] ] d p [ i − 1 ] [ k ] + m i n a b s ( j − k ) , n − a b s ( j − k ) + 1 dp[i][j]= \displaystyle\min_k∈pos[key[i−1]] {dp[i−1][k] + min{abs(j − k), n − abs(j − k)} + 1} dp[i][j]=kminpos[key[i1]]dp[i1][k]+minabs(jk),nabs(jk)+1

​> min{abs(j − k), n − abs(j − k)} + 1从位置k旋转到位置j的最少步数

  1. 初始状态dp[0][i] = min{i, n - i} + 1,最终答案为 min ⁡ i = 0 n − 1 d p [ m − 1 ] [ i ] \displaystyle\min_i=0^n-1 {dp[m-1][i]} imin=0n1dp[m1][i]

动态规划一般用于求解具有重叠子问题和最优子结构的问题,例如最长公共子序列、背包问题、最短路径等。重叠子问题指的是在求解问题的过程中,多次用到相同的子问题,最优子结构指的是问题的最优解可以通过子问题的最优解来构造

class Solution {public int findRotateSteps(String ring, String key) {int n = ring.length(), m = key.length();// 字符 i 在 ring 中出现的位置集合,用来加速计算转移的过程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], Integer.MAX_VALUE);}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();}
}

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

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

相关文章

2024Node.js零基础教程(小白友好型),nodejs新手到高手,(三)NodeJS入门——http协议

033_HTTP协议_初识HTTP协议 hello&#xff0c;大家好&#xff0c;这个小节我们来认识一下 http协议。 http是几个单词的首字母拼写&#xff0c;全称为Hypertext Transfer Protocol 译为超文本传输协议&#xff0c;那么这个http协议是互联网上应用最广泛的协议之一。顺便说一下…

rancher证书过期问题处理

问题 起初&#xff0c;打开rancher ui页面打不开&#xff0c;telnet rancher的服务端口也不通。查看rancher 控制节点&#xff0c;日志显示&#xff0c;X509&#xff1a;certificate has expired or is not ye valid。证书已过期 解决 现在网上大部分的解决方案都是针对的2…

TSINGSEE青犀智能分析网关V4如何利用AI智能算法保障安全生产、监管,掀开安全管理新篇章

旭帆科技的智能分析网关V4内含近40种智能分析算法&#xff0c;包括人体、车辆、消防、环境卫生、异常检测等等&#xff0c;在消防安全、生产安全、行为检测等场景应用十分广泛。如常见的智慧工地、智慧校园、智慧景区、智慧城管等等&#xff0c;还支持抓拍、记录、告警、语音对…

【TI毫米波雷达】CLI模块初始化,demo工程覆写CLI控制指令代码的操作方式(以IWR6843AOP为例)

【TI毫米波雷达】CLI模块初始化&#xff0c;demo工程覆写CLI控制指令代码的操作方式&#xff08;以IWR6843AOP为例&#xff09; 本文主要针对demo工程 通过覆写CLI配置 跳过CLI配置命令 以此来达到自动配置参数 并控制雷达的功能 在此期间不开启CLI和相关初始化 只是针对CLI控…

华为配置ARP安全综合功能实验

配置ARP安全综合功能示例 组网图形 图1 配置ARP安全功能组网图 ARP安全简介配置注意事项组网需求配置思路操作步骤配置文件 ARP安全简介 ARP&#xff08;Address Resolution Protocol&#xff09;安全是针对ARP攻击的一种安全特性&#xff0c;它通过一系列对ARP表项学习和A…

在深度学习中,epoch和learning rate的通常取值范围?

在深度学习中&#xff0c;epoch和学习率的取值确实会根据不同的任务、数据集和模型架构有所不同。然而&#xff0c;您提到的范围是一些常见的经验性取值&#xff0c;这些取值在很多情况下都能工作得相当好。 1. 对于epoch的取值范围&#xff1a; 在很多研究论文和实际应用中&…

单片机学习笔记--- 定时器/计数器(简述版!)

目录 定时器的介绍 定时计数器的定时原理 定时计数器的内部结构 两种控制寄存器 &#xff08;1&#xff09;工作方式寄存器TMOD &#xff08;2&#xff09;控制寄存器TCON 定时计数器的工作方式 方式0 方式1 方式2 方式3 定时器的配置步骤 第一步&#xff0c;对…

建立自己的交易法则,打造自己的交易系统

一、教程描述 本套教程由知名财经自媒体倾心打造&#xff0c;基金经理资深会计师游资操盘手团队&#xff0c;手把手教你打造自己的交易系统&#xff0c;1、海龟交易法则CANSLIM模型合二为一&#xff0c;建立自己的交易法则&#xff1b;2、严格执行交易系统&#xff0c;保护本金…

如何在微信搭建私域流量池?

A: ①给客户打标签 添加标签&#xff0c;多维度构建用户画像&#xff0c;精准发送消息。 ②群发信息 选择自定义时间&#xff0c;上传内容 (支持文字&#xff0c;图片) &#xff0c;一键群发 。 ③建立专属素材库 将常用的话术、图片与文件录入至素材库&#xff0c;员工可随…

永久删除 Elasticsearch 中的主节点

Elasticsearch 是一个开源分布式搜索和分析引擎&#xff0c;用于各种任务&#xff0c;例如全文搜索、日志分析和实时数据分析。 Elasticsearch 集群由一个或多个节点组成&#xff0c;每个节点可以具有多种角色&#xff0c;包括主节点&#xff08;master node&#xff09;、数据…

使用orangepi玩linux

最近看了这个大佬的文章&#xff0c;写了使用远程来挂载linux的方案&#xff0c;觉得还是很有意思的&#xff0c;瞬间感觉linux这块都还是相通的&#xff0c;就跑了一下&#xff0c;果然&#xff0c;牛逼&#xff01; 香橙派全志H3烧录Uboot&#xff0c;远程加载zImage&#xf…

vscode 插件 Tailwind CSS IntelliSense 解决 class 提示问题

问题描述&#xff1a; 如下写js字符串是没有class智能提示的&#xff1a; const clsName bg-[#123456] text-[#654321] return <div className{clsName}></div>解决方案&#xff1a; 安装 clsx 依赖 pnpm i clsx设置 vscode 的 settings.json {"tailwin…

Android 数据恢复电脑版免费下载使用方法 [2024 更新]

“我一直在寻找一款可以下载的适用于 PC 的优秀 Android 数据恢复软件。有很多&#xff0c;但大部分都需要我付费。你能推荐一个好的让我免费下载吗&#xff1f;” 奇客数据恢复安卓版是恢复已删除或丢失的 Android 数据的最安全的工具。免费下载下面的奇客数据恢复安卓版来尝试…

LPC804开发(9.DAC使用)

1.前言 这是最最简单的外设&#xff0c;应该没有之一&#xff0c;我大概看了10分钟就会用了&#xff0c;我这里快速说一说&#xff0c;争取今天再把ADC搞出来。 2.初始化 程序如下 /* Power on the DAC0.*/POWER_DisablePD(kPDRUNCFG_PD_DAC0);/* Configure the DAC. */DAC…

[word] word艺术字体如何设置? #知识分享#职场发展#媒体

word艺术字体如何设置&#xff1f; 在工作中有些技巧&#xff0c;可以快速提高工作效率&#xff0c;解决大部分工作&#xff0c;今天给大家分享word艺术字体如何设置的技巧&#xff0c;希望可以帮助到你。 1、设置艺术字 选中文字&#xff0c;然后点击菜单栏的【插入】按钮一一…

从零开始实现贪吃蛇(C语言版)

贪吃蛇 游戏介绍1.前置知识1.1 Win32API1.2 控制台程序1.3 坐标系统1.4 GetStdHandle(获取句柄)1.5 CONSOLE_CURSOR_INFO(控制台光标信息)1.6 GetConsoleCursorInfo(获取光标信息)1.7 SetConsoleCursorInfo(设置控制台光标信息)1.8 SetConsoleCursorPosition(设置光标当前位置)…

国外知名的农业机器人公司

从高科技温室到云播种&#xff0c;农业机器人如何帮助农民填补劳动力短缺以及超市货架的短缺。 概要 “高科技农业”并不矛盾。当代农业经营更像是硅谷&#xff0c;而不是美国哥特式&#xff0c;拥有控制灌溉的应用程序、驾驶拖拉机的 GPS 系统和监控牲畜的带有 RFID 芯片的耳…

Flutter 和 Android原生(Activity、Fragment)相互跳转、传参

前言 本文主要讲解 Flutter 和 Android原生之间&#xff0c;页面相互跳转、传参&#xff0c; 但其中用到了两端相互通信的知识&#xff0c;非常建议先看完这篇 讲解通信的文章&#xff1a; Flutter 与 Android原生 相互通信&#xff1a;BasicMessageChannel、MethodChannel、…

dnslog在sql盲注

首先必须保证sql是在windows下 因为需要使用到UNC路径 保证mysql中的secure_file_priv为空 secure_file_priv为null&#xff0c;load_file则不能加载文件。 secure_file_priv为路径&#xff0c;可以读取路径中的文件&#xff1b; secure_file_priv为空&#xff0c;可以读取磁盘…

千兆电口模块和万兆电口模块:网络速度的演变

随着信息技术的迅猛发展&#xff0c;网络通信技术也在不断进步。在过去的几十年中&#xff0c;以太网的速度发生了巨大的变化&#xff0c;从最初的百兆以太网&#xff0c;到如今的千兆以太网和万兆以太网甚至40G、100G以太网满足了大数据、云计算、人工智能等新兴应用的需求。在…