编辑距离

不羁岁月 提交于 2020-03-02 00:06:28

定义
编辑距离又称Leveinshtein距离,是由俄罗斯科学家Vladimir Levenshtein在1965年提出。编辑距离是计算两个文本相似度的算法之一,以字符串为例,字符串a和字符串b的编辑距离是将a转换成b的最小操作次数,这里的操作包括三种:

插入一个字符
删除一个字符
替换一个字符

举个例子,kitten和sitting的编辑距离是3,kitten -> sitten(k替换为s) -> sittin(e替换为i) -> sitting(插入g),至少要做3次操作。

力扣原题

题解

思路:
dp[i][j]用来表示主串前i个字符(包括i),匹配到前j个字符时所需要的最小编辑距离,如果字符一样,那就等于dp[i-1][j-1],如果不一样,那就比较三种情况,比如删除,那就dp[i-1][j]+1,插入,那就dp[i][j-1]+1,替换那就dp[i-1][j-1]+1

注意:
三种操作都是对主串进行的

要从1开始遍历,不然在条件判断语句就会越界

要以主串为行,模板串为列

要初始化

class Solution {
public:
    int minDistance(string word1, string word2) 
    {
         int i,j,k,m,n,x,y,q,u;
        
         int len1=word1.length();
         int len2=word2.length();
         int dp[len1+1][len2+1]; 
         dp[0][0]=0;
         for(i=1;i<=len1;i++)dp[i][0]=i;
         for(i=1;i<=len2;i++)dp[0][i]=i;
         
         for(i=1;i<=len1;i++)
         {
             for(j=1;j<=len2;j++)
             {
                 if(word1[i-1]==word2[j-1]) dp[i][j]=dp[i-1][j-1];
                 else dp[i][j]=min(min(dp[i-1][j],dp[i][j-1]),dp[i-1][j-1])+1;
             }
         }
         return dp[len1][len2];
    }
};
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!