编辑距离
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]; } };
东北日出西边雨 道是无情却有情