[LeetCode] 72. Edit Distance
2016-08-01 21:05
239 查看
思路:
这题也是没有思路, 看了大神的解答后照猫画虎https://discuss.leetcode.com/topic/17639/20ms-detailed-explained-c-solutions-o-n-space. 动态规划, 首先初始化第一行第一列, 因为这时候只能补字符, 所以就是i和j的大小. 然后, 填补其他方格. 如果word1和word2的当前字符相同, 就找他们各自向前一个字符的距离, 直接取那个值就够了, 因为现在的两个字符相等, 就不用再加了. 如果当前两个字符不相同, 那么就看当前各自的左上, 上方, 左方的格子哪个值比较小, 选小的然后加1即可.
这题也是没有思路, 看了大神的解答后照猫画虎https://discuss.leetcode.com/topic/17639/20ms-detailed-explained-c-solutions-o-n-space. 动态规划, 首先初始化第一行第一列, 因为这时候只能补字符, 所以就是i和j的大小. 然后, 填补其他方格. 如果word1和word2的当前字符相同, 就找他们各自向前一个字符的距离, 直接取那个值就够了, 因为现在的两个字符相等, 就不用再加了. 如果当前两个字符不相同, 那么就看当前各自的左上, 上方, 左方的格子哪个值比较小, 选小的然后加1即可.
int minDistance(string word1, string word2) { int m = word1.length(), n = word2.length(); int flags[m + 1][n + 1] = {0}; for (int i = 1; i <= m; i++) flags[i][0] = i; for (int j = 1; j <= n; j++) flags[0][j] = j; for (int i = 1; i <= m; i++) { for (int j = 1; j <= n; j++) { if (word1[i - 1] == word2[j - 1]) flags[i][j] = flags[i - 1][j - 1]; else flags[i][j] = min(flags[i - 1][j - 1], min(flags[i - 1][j], flags[i][j - 1])) + 1; } } return flags[m] ; }
相关文章推荐
- [LeetCode] Letter Combinations of a Phone Number
- Search Insert Position [LEETCODE]
- LeetCode | Set Matrix Zeroes
- leetcode String to Integer (atoi)
- LeetCode "Regular Expression Matching"
- [LeetCode 第5题] -- Max Points on a Line
- 【LeetCode】Remove Nth Node From End of List
- LeetCode Remove Duplicates from Sorted Array II
- leetcode 日经贴,Cpp code -Reverse Nodes in k-Group
- leetcode-3Longest Substring Without Repeating Characters
- [leetcode] 040. Combination Sum II (Medium) (C++)
- 【Leetcode】Best Time to Buy and Sell Stock
- leetcode[C++]Surrounded Regions
- Leetcode: Perfect Squares
- leetcode--Single Number III
- LeetCode 第 69 题 (Sqrt(x))
- leetcode笔记--Valid Anagram
- LeetCode8 String to Integer (atoi)
- 【Leetcode】207. Course Schedule
- leetcode(52).204. Count Primes