码迷,mamicode.com
首页 > 其他好文 > 详细

LeetCode 72. Edit Distance

时间:2018-11-29 23:19:02      阅读:185      评论:0      收藏:0      [点我收藏+]

标签:等价   distance   额外   一个   span   cto   增加   bsp   turn   

典型DP题,思路上和 LCS 很像。

dp[i][j] 表示word1前i个 word2前j个 所需的最小操作数。

base case: dp[i][0]=i, dp[0][j]=j. 需要额外注意这里的base case。

dp[i][j] = dp[i-1][j-1]  if word1[i-1]==word2[j-1]

     min{ dp[i-1][j-1], dp[i-1][j], dp[i][j-1] } + 1  o/w

不相等的时候 dp[i-1][j-1]+1 表示把不相等的replace一下,dp[i-1][j]+1 表示把word1减少一个字符,dp[i][j-1]+1 表示把word2减少一个字符。(增加一个字符和减少一个字符是等价的)

class Solution {
public:
    int minDistance(string word1, string word2) {
        vector<vector<int>> dp(word1.size()+1,vector<int>(word2.size()+1,0));
        for (int i=1;i<=word1.size();++i) dp[i][0]=i;
        for (int j=1;j<=word2.size();++j) dp[0][j]=j;        
        
        for (int i=1;i<=word1.size();++i){
            for (int j=1;j<=word2.size();++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], min(dp[i-1][j], dp[i][j-1])) + 1;
            }
        }
        return dp[word1.size()][word2.size()];
    }
};

 

LeetCode 72. Edit Distance

标签:等价   distance   额外   一个   span   cto   增加   bsp   turn   

原文地址:https://www.cnblogs.com/hankunyan/p/10041450.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!