首页 > 代码库 > LeetCode72 Edit Distance
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 };
LeetCode72 Edit Distance
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。