定义
编辑距离又称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];
}
};
来源:CSDN
作者:WAWA圣斗士
链接:https://blog.csdn.net/weixin_45670020/article/details/104599475