标签:edit distance leetcode 动态规划 行编辑距离
给定一个源串和目标串,能够对源串进行如下操作:
1. 在给定位置上插入一个字符
2. 替换任意字符
3. 删除任意字符
写一个程序,返回最小操作数,使得对源串进行这些操作后等于目标串,源串和目标串的长度都小于2000。
设状态dp[i][j] 表示从源串s[0...i] 和 目标串t[0...j] 的最短编辑距离
边界为:dp[i][0] = i,dp[0][j] = j
递推方程:
class Solution { public: int minDistance(string word1, string word2) { int Slen = word1.size(); int Tlen = word2.size(); int dp[Slen+1][Tlen+1] = {0};//注意:这里都+1,并且初始化为0 //长度为n的字符串有n+1个隔板 for(int i=1; i<=Slen; i++) //注意从1开始 dp[i][0] = i; for(int j=1; j<=Tlen; j++) dp[0][j] = j; for(int i=1; i<=Slen; i++) { for(int j=1; j<=Tlen; j++) { if(word1[i-1] == word2[j-1]) dp[i][j] = dp[i-1][j-1]; else { int temp = min(dp[i-1][j], dp[i][j-1]); dp[i][j] = min(temp, dp[i-1][j-1]) + 1; } } } return dp[Slen][Tlen]; } };
标签:edit distance leetcode 动态规划 行编辑距离
原文地址:http://blog.csdn.net/tommyzht/article/details/46386661