72. Edit Distance 最小编辑距离

原创 2016年08月31日 15:12:47

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


解答:

给定两个字符串str1,str2. 假设要改变str1,使得其变成str2(操作只在s1上进行). dp[i][j] 表示求s1的前i个和s2的前j个的最小编辑距离。那么有下面三种情况:

(1)若前dp[i-1][j-1]的已经求得,

若s[i] == s[j] 则dp[i][j] =dp[i-1][j-1]; 

s[i] != s[j] 则dp[i][j] =dp[i-1][j-1]+1;  将s[i]的值replace成s[j]的值

(2)若dp[i][j-1]的已经求得,则需要insert一个和s2[j]相同的,才能使其两个字符串相等,即

dp[i][j] =dp[i][j-1]+1;

(3)若dp[i-1][j]的已经求得,则只需把s1[i]删除就好 ,即

dp[i][j] =dp[i-1][j]+1; 

因此递推公式可由上式得到。

注意:由于对于第一个字符来说,前i-1个是没有字符,没法得到i-1,j-1,故对dp矩阵多加一行一列,表示字符串为空时的情形。

代码如下:


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


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

LeetCode-72. Edit Distance (JAVA)字符串最小编辑距离DP&DFS

LeetCode-72. Edit Distance (JAVA)字符串最小编辑距离 动态规划

最小编辑距离 | Minimum Edit Distance

关于两个字符串s1,s2的差别,可以通过计算他们的最小编辑距离来决定。 设A、B为两个字符串,狭义的编辑距离定义为把A转换成B需要的最少删除(删除A中一个字符)、插入(在A中插入一个字符)和替换(把...

“最小编辑距离(Minimum Edit Distance)”

一、课程介绍 斯坦福大学于2012年3月在Coursera启动了在线自然语言处理课程,由NLP领域大牛Dan Jurafsky 和 Chirs Manning教授授课: https://cla...

最小编辑距离(Minimum edit distance)

最小编辑距离是计算欧式距离的一种方法,可以被用于计算文本的相似性以及用于文本纠错,因为这个概念是俄罗斯科学家 Vladimir Levenshtein 在1965年提出来的,所以编辑距离又称为Leve...

stanford NLP第三课“最小编辑距离(Minimum Edit Distance)”

一、课程介绍 斯坦福大学于2012年3月在Coursera启动了在线自然语言处理课程,由NLP领域大牛Dan Jurafsky 和 Chirs Manning教授授课: https://cla...
  • fkyyly
  • fkyyly
  • 2014-07-08 15:23
  • 1081

Leetcode 72. Edit Distance 编辑距离 解题报告

1 解题思想编辑距离,即给了字符串T1和字符串T2,试问通过插入、删除、替换等的操作,T1可以通过几步变换成T2?这道题首先还是动态规划解决,构建n*m矩阵,位置[i,j]标示串T1[0,i]和T2[...
  • MebiuW
  • MebiuW
  • 2016-05-15 23:56
  • 1420

[LeetCode 72] Edit Distance(编辑距离/动态规划/DP)

72. Edit DistanceGiven two words word1 and word2, find the minimum number of steps required to conve...
  • zlasd
  • zlasd
  • 2016-12-01 23:24
  • 115

LeetCode 72. Edit Distance(编辑距离)

原题网址:https://leetcode.com/problems/edit-distance/ Given two words word1 and word2, find the minimu...

72 Edit Distance (编辑距离)

Given two words word1 and word2, find the minimum number of steps required to convert word1 to word2...

Minimum edit distance(levenshtein distance)(最小编辑距离)初探

最小编辑距离的定义:编辑距离(Edit Distance),又称Levenshtein距离,是指两个字串之间,由一个转成另一个所需的最少编辑操作次数。许可的编辑操作包括将一个字符替换成另一个字符,插入...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)