72. Edit Distance

来源:互联网 发布:万网域名转出 编辑:程序博客网 时间:2024/04/28 02:28
/*dp[i][j] 代表将word1[0~i-1]转化成word2[0~j-1]所需的最小步数考虑边界的情况 dp[i][0]=i dp[0][j]=j;除了边界情况以外i>=1,i<=word1.size() j>=1 j<word2.size()if word1[i-1]=word2[j-1] 则dp[i][j]=dp[i-1][j-1]else    使用replace方法dp[i][j]=dp[i-1][j-1]+1(先把word1[0~i-2]转化成word2[0~j-2] 再把word1[i-1]replace成word2[j-1])   使用deletion的方式 dp[i][j]=1+dp[i-1][j];(先把word[i-1]delete 然后再把word1[0~i-2]转化成word2[0~j-1])   使用insert的方式 dp[i][j]=dp[i][j-1]+1;(先把word1[0~i-1]转化成word2[0~j-2]再insert word2[j-1])   选择以上三种方式中最少步数的给dp[i][j]赋值*/class Solution {public:    int minDistance(string word1, string word2) {        int m=word1.size();        int n=word2.size();        vector<vector<int>> dp(m+1,vector<int>(n+1,0));        for(int i=0;i<=m;i++)            dp[i][0]=i;        for(int j=0;j<=n;j++)            dp[0][j]=j;        for(int i=1;i<=m;i++)        {            for(int j=1;j<=n;j++)            {                if(word1[i-1]==word2[j-1])                    dp[i][j]=dp[i-1][j-1];                else                     dp[i][j]=min(dp[i-1][j-1]+1,min(1+dp[i-1][j],dp[i][j-1]+1));            }        }        return dp[m][n];    }};
1 0
原创粉丝点击