514. Freedom Trail
In the video game Fallout 4, the quest "Road to Freedom" requires players to reach a metal dial called the "Freedom Trail Ring", and use the dial to spell a specific keyword in order to open the door.
Given a string ring, which represents the code engraved on the outer ring and another string key, which represents the keyword needs to be spelled. You need to find the minimum number of steps in order to spell all the characters in the keyword.
Initially, the first character of the ring is aligned at 12:00 direction. You need to spell all the characters in the string key one by one by rotating the ring clockwise or anticlockwise to make each character of the string key aligned at 12:00 direction and then by pressing the center button.
At the stage of rotating the ring to spell the key character key[i]:
- You can rotate the ring clockwise or anticlockwise one place, which counts as 1 step. The final purpose of the rotation is to align one of the string ring's characters at the 12:00 direction, where this character must equal to the character key[i].
- If the character key[i] has been aligned at the 12:00 direction, you need to press the center button to spell, which also counts as 1 step. After the pressing, you could begin to spell the next character in the key (next stage), otherwise, you've finished all the spelling.
Example:
Input: ring = "godding", key = "gd"
Output: 4
Explanation:
For the first key character 'g', since it is already in place, we just need 1 step to spell this character.
For the second key character 'd', we need to rotate the ring "godding" anticlockwise by two steps to make it become "ddinggo".
Also, we need 1 more step for spelling.
So the final output is 4.
Note:
- Length of both ring and key will be in range 1 to 100.
- There are only lowercase letters in both strings and might be some duplcate characters in both strings.
- It's guaranteed that string key could always be spelled by rotating the string ring.
Approach #1: DP. [C++]
class Solution {
public:
int findRotateSteps(string ring, string key) {
int N = ring.length();
int M = key.length();
int ans = INT_MAX;
// dp[i][j] denote means the minimum of steps to spell the key[0:i] which key[i] at the index of j in ring.
vector<vector<int>> dp(M, vector<int>(N, INT_MAX));
vector<vector<int>> char_idx(26, vector<int>());
for (int i = 0; i < N; ++i) {
int c = ring[i] - 'a';
char_idx[c].push_back(i);
}
for (int i = 0; i < M; ++i) {
int cur_char = key[i] - 'a';
for (int cur_pos : char_idx[cur_char]) {
if (i == 0) {
dp[i][cur_pos] = min(cur_pos, N - cur_pos) + 1;
} else {
int pre_char = key[i-1] - 'a';
for (int pre_pos : char_idx[pre_char]) {
int diff = min(abs(cur_pos-pre_pos), N - abs(cur_pos-pre_pos));
dp[i][cur_pos] = min(dp[i][cur_pos], dp[i-1][pre_pos]+diff+1);
//cout << dp[i][cur_pos] << endl;
}
}
if (i == M-1)
ans = min(ans, dp[M-1][cur_pos]);
}
}
return ans;
}
};
Analysis:
https://leetcode.com/problems/freedom-trail/discuss/194601/DP-solution-with-detailed-text-and-video-explanation
514. Freedom Trail的更多相关文章
- 514 Freedom Trail 自由之路
详见:https://leetcode.com/problems/freedom-trail/description/ C++: class Solution { public: int findRo ...
- [LeetCode] Freedom Trail 自由之路
In the video game Fallout 4, the quest "Road to Freedom" requires players to reach a metal ...
- [Swift]LeetCode514. 自由之路 | Freedom Trail
In the video game Fallout 4, the quest "Road to Freedom" requires players to reach a metal ...
- 动态规划——Freedom Trail
题目:https://leetcode.com/problems/freedom-trail/ 额...不解释大意了,题目我也不想写过程了有点繁琐,直接给出代码: public int findRot ...
- LeetCode All in One题解汇总(持续更新中...)
突然很想刷刷题,LeetCode是一个不错的选择,忽略了输入输出,更好的突出了算法,省去了不少时间. dalao们发现了任何错误,或是代码无法通过,或是有更好的解法,或是有任何疑问和建议的话,可以在对 ...
- LeetCode Weekly Contest 22
1. 532. K-diff Pairs in an Array 分析:由于要唯一,所以要去重,考虑k=0,时候,相同的数字需要个数大于1,所以,先用map统计个数,对于k=0,特判,对于其他的,遍历 ...
- 算法与数据结构基础 - 深度优先搜索(DFS)
DFS基础 深度优先搜索(Depth First Search)是一种搜索思路,相比广度优先搜索(BFS),DFS对每一个分枝路径深入到不能再深入为止,其应用于树/图的遍历.嵌套关系处理.回溯等,可以 ...
- All LeetCode Questions List 题目汇总
All LeetCode Questions List(Part of Answers, still updating) 题目汇总及部分答案(持续更新中) Leetcode problems clas ...
- Leetcode problems classified by company 题目按公司分类(Last updated: October 2, 2017)
All LeetCode Questions List 题目汇总 Sorted by frequency of problems that appear in real interviews. Las ...
随机推荐
- Python OrderedDict使用
一.最近最少使用实现: import collections class LRUDict(object): ''' 最近最少使用队列实现,最近使用的键值放后面 ''' def __init__(sel ...
- SaltStack 的插件特性
:first-child { margin-top: 0; } blockquote > :last-child { margin-bottom: 0; } img { border: 0; m ...
- 142. Linked List Cycle II (List; Two-Pointers)
Given a linked list, return the node where the cycle begins. If there is no cycle, return null. Note ...
- winfrom保存图片,将文件夹中图片放入listview,与撤回操作
之前那些操作完成对图片的修改之后,就是要保存图片了. 这里保存用到一个SaveFileDialog控件,可以获取用户选择的保存文件的路径. ) { SaveFileDialog saveImageDi ...
- ajax获取json数据为undefined--原因解析
解决办法:var dataObj=eval("("+data+")");//转换为json对象 问题: 1. 碰到一个问题ajax成功获取json数据后,取值显 ...
- Openssl dsaparam命令
一.简介 dsaparam指令用来生成和操作dsa参数 二.语法 openssl dsaparam [-inform DER|PEM] [-outform DER|PEM] [-in filename ...
- 详解python包管理器pip安装
pip对于使用python的朋友并不陌生,当你想安装python模块的时候一定会首先想到它.pip 是一个安装和管理 Python 包的工具 , 是 easy_install 的一个替换品. 今天来说 ...
- 设计模式(java的23种设计模式)
转自:leshui http://blog.csdn.net/leshui/article/details/11951 在java版看见了这篇文章,作者以轻松的语言比喻了java的32种模式,有很好的 ...
- MSSQL数据库高版本迁移到低版本
起因是因为客户要把系统从阿里云迁移到本地服务器,阿里云上的数据库版本是MSSQL2016,客户提供的服务器是Server2008R2的,问题就来了,Server2008不支持2016版本,最后只能装的 ...
- Qt的翻译文件QTranslator不能使用问题总结(原)
笔者今天在自己工程中使用翻译文件,发现没有起作用,反复查找,发现是用宏定义了命名空间,生成.ts文件时,不会加上命名空间,所以生成的.qm文件在实际使用时,会无法找到对应的语句. 如果将宏定义的命名空 ...