LeetCode72 Edit Distance

题目:

Given two words word1 and word2, find the minimum number of steps required to convert word1 to word2. (each operation is counted as 1 step.)

You have the following 3 operations permitted on a word: (Hard)

a) Insert a character
b) Delete a character
c) Replace a character

分析:

双序列动态规划问题,dp[i][j]表示第一个序列i ...和 第二个序列j ...;

对应本题:

1. 状态: dp[i][j]表示第一个字符串前i个字符到第二个字符串前j个字符需要的编辑距离;
2. 递推关系:
  如果 s1[i] == s2[j]
    dp[i][j] = min(dp[i-1][j-1] //表示修改
           ,dp[i-1][j] + 1 //表示删除
             ,dp[i][j-1] + 1) //表示增加
  如果 s1[i] != s2[j]
    dp[i][j] = min(dp[i-1][j-1] ,dp[i-1][j],dp[i][j-1]) + 1

3. 初始化:

  dp[i][0] = i; i = 1...m;
  dp[0][j] = j; j = 1...n;

代码:

 1 class Solution {
 2 public:
 3     int minDistance(string word1, string word2) {
 4         //dp[i][j]表示第一个字符串前i个字符到第二个字符串前j个字符需要的编辑距离;
 5         int m = word1.size(), n = word2.size() ;
 6         int length = max(m,n);
 7         int dp[length + 1][length + 1];
 8         dp[0][0] = 0;
 9         for(int i = 1;i <= m;++i){
10             dp[i][0] = i;
11         }
12         for(int i = 1; i <= n;++i){
13             dp[0][i] = i;
14         }
15         for(int i = 1; i <= m; ++i){
16             for(int j = 1; j <= n; ++j){
17                 if(word1[i - 1] != word2[j - 1]){
18                     dp[i][j] = min( min(dp[i-1][j-1],dp[i-1][j]), dp[i][j-1]) + 1;
19                 }
20                 else{
21                     dp[i][j] = min( min(dp[i-1][j-1], dp[i-1][j] + 1), dp[i][j-1] + 1);
22                 }
23             }
24         }
25         return dp[m][n];
26     }
27 };
时间: 2024-10-26 05:34:23

LeetCode72 Edit Distance的相关文章

[leetcode72]Edit Distance(dp)

题目链接:https://leetcode.com/problems/edit-distance/ 题意:求字符串的最短编辑距离,就是有三个操作,插入一个字符.删除一个字符.修改一个字符,最终让两个字符串相等. DP,定义两个字符串a和b,dp(i,j)为截至ai-1和bj-1时的最短编辑距离. 当ai-1=bi-1的时候,有dp(i,j)=min(dp(i,j),dp(i-1,j-1)),对应不做任何操作: 不相等的时候会有dp(i,j)=min(dp(i,j),dp(i-1,j-1)+1),

[Locked] One Edit Distance

One Edit Distance Given two strings S and T, determine if they are both one edit distance apart. 分析: 编辑距离复杂度为O(MN),而本题显然不能用这么高的复杂度:首先,可以通过判断两个字符串是否等长来决定用增一位.减一位.替换一位这三种方法之一来使得两个字符串等同,如果都不行,就return false:然后同时遍历S和T,第一次遇到不匹配的,就用刚才判断出的方法拯救一下:第二次还遇到不匹配的,就

[LeetCode] One Edit Distance 一个编辑距离

Given two strings S and T, determine if they are both one edit distance apart. 这道题是之前那道Edit Distance的拓展,然而这道题并没有那道题难,这道题只让我们判断两个字符串的编辑距离是否为1,那么我们只需分下列三种情况来考虑就行了: 1. 两个字符串的长度之差大于1,那么直接返回False 2. 两个字符串的长度之差等于1,那么长的那个字符串去掉一个字符,剩下的应该和短的字符串相同 3. 两个字符串的长度之

leetcode day4 -- Binary Tree Postorder(Preorder) Traversal &amp;&amp; Edit Distance

 1.Binary Tree Postorder Traversal Given a binary tree, return the postorder traversal of its nodes' values. For example: Given binary tree {1,#,2,3}, 1 2 / 3 return [3,2,1]. Note: Recursive solution is trivial, could you do it iteratively? 分析:后续遍历

[LintCode] Edit Distance

Edit Distance Given two words word1 and word2, find the minimum number of steps required to convert word1 to word2. (each operation is counted as 1 step.) You have the following 3 operations permitted on a word: Insert a character Delete a character

【leetcode】Edit Distance 详解

下图为TI C6xx DSP Nyquist总线拓扑图,总线连接了master与slave,提供了高速的数据传输.有很多种速率不同的总线,如图中的红色方框,最高速总线为CPU/2 TeraNet SCR(即VBUSM SCR),带宽为256bit,其他低速总线为CPU/3,CPU/6,带宽参考图中所示.总线之间用Bridge(桥)连接,作用包括转换总线的速率,使之与所流向总线的速率相同等. 在具体应用中,各种速率的总线完全可以满足复杂的数据传输,而数据传输的瓶颈往往在于连接总线之间的Bridge

leetcode 161. One Edit Distance 判断两个字符串是否是一步变换 --------- java

Given two strings S and T, determine if they are both one edit distance apart. 给定两个字符串,判断他们是否是一步变换得到的. 在这里需要注意几点: 1.不等于1的变换都要返回false(包括变换次数等于0). 2.还有很多细节需要注意. 方法如下: 1.直接判断:1)如果差值大于1,直接返回false.  2)如果长度相同,那么依次判断,是否只有一个字母不一样.  3)如果不一样,那么看是否是只是多出了一个字母. p

LeetCode One Edit Distance

原题链接在这里:https://leetcode.com/problems/one-edit-distance/ Given two strings S and T, determine if they are both one edit distance apart. 与Edit Distance类似. 若是长度相差大于1, return false. 若是长度相差等于1, 遇到不同char时, 长的那个向后挪一位. 若是长度相等, 遇到不同char时同时向后挪一位. 出了loop还没有返回,

161. One Edit Distance

题目: Given two strings S and T, determine if they are both one edit distance apart. 链接: http://leetcode.com/problems/one-edit-distance/ 6/14/2017 2ms, 58% 提交好几次才通过,所以代码像打补丁一样.注意的test case: 2个空string -- false 相同的string -- false 当检查出来不一致时,根据长度来比较之后的subs