leetcode-72 编辑距离(动态规划)

题目链接

动态规划
递推式:

if(word1[i]==word2[j])
    dp[i][j] = dp[i-1][j-1]+1
else dp[i][j] = min(dp[i-1][j-1],dp[i][j-1],dp[i-1][j])
class Solution {
public:
    int minDistance(string word1, string word2) {
        int N = word1.length();
        int M = word2.length();
        if(N==0)
        {
            if(M==0)
                return 0;
            return 1;
        }
        if(M==0)
            return 1;
        int dp[1100][1100];
        dp[0][0] = word1[0]==word2[0] ? 0:1;
        bool flag1 = false;
        bool flag2 = false;
        for(int j=1;j<M;j++)
        {
            if(!flag1&&word1[0]==word2[j])
            {
                flag1 = true;
                dp[0][j] = dp[0][j-1];
            }
            else dp[0][j] = dp[0][j-1]+1;
        }
        for(int i=1;i<N;i++)
        {
            if(!flag2&&word1[i]==word2[0])
            {
                flag2 = true;
                dp[i][0] = dp[i-1][0];
            }
           else dp[i][0] = dp[i-1][0]+1;
        }
        for(int i=1;i<=N;i++)
        {
            for(int j=1;j<=M;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[N-1][M-1];

    }
};
原创文章 39 获赞 5 访问量 4924

猜你喜欢

转载自blog.csdn.net/q1072118803/article/details/105189991