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
You have the following 3 operations permitted on a word:
a) Insert a character
b) Delete a character
c) Replace a character
最短编辑距离,动规解决
len[i][j]表示word1的前i个字符与word2的前j个字符的最短编辑距离
len[i][j]=min(len[i-1][j-1]+x,min(len[i-1][j]+1,len[i][j-1]+1))
其中当word1的第i个字符与word2的第j个字符想同时x=0;不同时x=1
AC代码
class Solution {
public:
int min(int x,int y)
{
return x<y?x:y;
}
int minDistance(string word1, string word2) {
int len1=word1.size();
int len2=word2.size();
if(len1==0)
return len2;
if(len2==0)
return len1;
int len[len1+1][len2+1];
memset(len,0,sizeof(len));
int x=0;
for(int i=1;i<=len1;++i)
len[i][0]=i;
for(int i=1;i<=len2;++i)
len[0][i]=i;
for(int i=1;i<=len1;++i)
{
for(int j=1;j<=len2;++j)
{
if(word1[i-1]==word2[j-1])
x=0;
else
x=1;
len[i][j]=min(len[i-1][j-1]+x,min(len[i-1][j]+1,len[i][j-1]+1));
}
}
return len[len1][len2];
}
};
其他Leetcode题目AC代码:https://github.com/PoughER/leetcode