编辑距离
https://leetcode-cn.com/problems/edit-distance/

思路分析:
dp[i][j] 表示第一个串在 i 位置,第二个串在 j 位置时,两个串若想保持一致最小的操作次数
dp[i][j-1] 表示插入一个新的字符,dp[i-1][j] 表示删去一个字符,dp[i-1][j-1]表示替换一个字符
代码示例:
class Solution {
public:
int minDistance(string word1, string word2) {
int dp[505][505];
memset(dp, 0, sizeof(dp));
int len1 = word1.size();
int len2 = word2.size();
for(int i = len1; i > 0; i--) word1[i] = word1[i-1];
for(int i = len2; i > 0; i--) word2[i] = word2[i-1];
for(int i = 1; i <= len2; i++) dp[0][i] = i;
for(int i = 1; i <= len1; i++) dp[i][0] = i;
for(int i = 1; i <= len1; i++){
for(int j = 1; j <= len2; j++){
if (word1[i] == word2[j]) dp[i][j] = dp[i-1][j-1];
else {
dp[i][j] = min(dp[i-1][j-1], min(dp[i][j-1], dp[i-1][j]))+1;
}
}
}
return dp[len1][len2];
}
};
东北日出西边雨 道是无情却有情

浙公网安备 33010602011771号