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

leetcode 72. Edit Distance

时间:2017-10-04 23:57:44      阅读:387      评论:0      收藏:0      [点我收藏+]

标签:rip   int   color   .com   ring   rmi   required   mit   eps   

link

 

Given two words word1 and word2, find the minimum number of steps required to convert word1 to word2. (each operation is counted as 1 step.)

You have the following 3 operations permitted on a word:

a) Insert a character
b) Delete a character
c) Replace a character

 

题意: 定义一次编辑可以1.插入一个字符 2. 删除一个字符 3 将一个字符替换为另一个。

求两个字符串的最短编辑距离。

 

思路:

在切了前面两道匹配之后,这题应该就很容易了吧。

同样定义dp[i][j]为word1[0,i) 匹配word2[0,j)的最小编辑距离。

在转移时,首先我们能看到插入一个字符和删除一个字符是一回事,删除一个字符能完成的插入一个字符也一定能完成,因此可以无视删除操作。(这很重要,这决定了状态只能从前面转移过来)

因此dp[i][j]可以由4个地方转移而来:

1. word1[i-1] == word2[j-1]: 那么直接匹配这俩就行,为dp[i-1][j-1]

2. != 那么随便修改一下,比如修改word1[i-1] = word2[j-1], 为dp[i-1][j-1] + 1

3 在1中插入: 那么就是用word1[0,i) 匹配word2[0,j-1) , 新插入的字符匹配word2[j-1],为dp[i][j-1] + 1

4 在2中插入,同理dp[i-1][j] + 1

求min即可。

为了不特判i=0或者j=0的情况(不然就没有i-1/j-1了) ,预先处理为0的情况 dp[0][i] = i, dp[j][0] = j 。

 

code:

class Solution {
public:
    int minDistance(string word1, string word2) {
        int len1 = word1.length(), len2 = word2.length();
        if(len1 == 0) return len2;
        if(len2 == 0) return len1;
        vector<vector<int>>dp (len1 + 1, vector<int>(len2 + 1, INT_MAX));
        dp[0][0] = 0;
        for(int i = 0; i <= len1; i++){ 
            dp[i][0] = i;
        }
        for(int i = 0; i <= len2; i++){
            dp[0][i] = i;
        }
        for(int i = 1; i <= len1; i++){
            for(int j = 1; j <= len2; j++){
                if(word1[i-1] == word2[j-1]) dp[i][j] = min(dp[i][j], dp[i-1][j-1]);
                // add char in word1
                dp[i][j] = min(dp[i][j], dp[i][j-1] + 1);
                // add char in word2
                dp[i][j] = min(dp[i][j], dp[i-1][j] + 1);
                
                // delete = insert

                // replace char
                dp[i][j] = min(dp[i][j], dp[i-1][j-1] + 1);
            }
        }
        
        return dp[len1][len2];
    }
};

 

leetcode 72. Edit Distance

标签:rip   int   color   .com   ring   rmi   required   mit   eps   

原文地址:http://www.cnblogs.com/bbbbbq/p/7628028.html

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