编辑距离

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];
        
    }
};

  

posted @ 2021-11-09 21:57  楼主好菜啊  阅读(27)  评论(0编辑  收藏  举报