leetcode 72 编辑距离

题目:

对于这道题目,我们可以使用dp来解决,我们定义dp[i][j]表示将word1中的前 i 个字符到word2的前 j 个字符的最短距离,

然后我们可以得到dp的方程式,当word1的第i个字符等于word2的第 j 个字符时,对于word1来说存在两种操作,即插入和删除,

此时的方程式如下:

当当word1的第i个字符不等于word2的第 j 个字符时,此时对于word1来说存在三种操作,即插入、删除和替换

此时方程式如下:

class Solution {
public:
    int minDistance(string word1, string word2) {
        int l1=word1.size();
        int l2=word2.size();
        vector<vector<int>> dp(l1+1,vector<int>(l2+1,0));
        for(int i=1;i<=l1;i++)
        {
            dp[i][0]=i;
        }
        for(int j=1;j<=l2;j++)
        {
            dp[0][j]=j;
        }
        for(int i=1;i<=l1;i++)
        {
            for(int j=1;j<=l2;j++)
            {
                if(word1[i-1]==word2[j-1])
                {
                    dp[i][j]=min(min(dp[i-1][j],dp[i][j-1])+1,dp[i-1][j-1]);
                }
                else
                {
                    dp[i][j]=min(min(dp[i-1][j],dp[i][j-1])+1,dp[i-1][j-1]+1);
                }
            }
        }
        return dp[l1][l2];
    }
};

猜你喜欢

转载自www.cnblogs.com/QingFengDaHui/p/12459120.html