链接:http://soj.sysu.edu.cn/show_problem.php?pid=20622
循环条件记得写等号。
设需要计算编辑距离的两个字符串分别为x[1..m]和 y[1..n],用E(i, j)表示x[1..i]和y[1..j]的编辑距离,则可 以得到动态规划的状态转移方程:
当i=0时, E(i, j) = j;
当j=0时,E(i, j) = i;
当i>0且j>0时,
E(i, j) = min{1 + E(i -1, j), 1 + E(i, j - 1), diff(i, j) + E(i – 1, j - 1)} 其中,当x[i]=y[j]时, diff(i, j)=0;否则diff(i, j)=1.
class Solution {
public:
int minx(int a,int b,int c){
int minNum = a;
if(b<minNum){
minNum = b;
}
if(c<minNum) {
minNum = c;
}
return minNum;
}
int minDistance(string word1, string word2) {
int E[1001][1001];
for(int i=0; i <=word1.length(); i++){
E[i][0] = i;
}
for(int i=0; i <=word2.length(); i++){
E[0][i] = i;
}
for(int i=1; i <=word1.length(); i++){
for(int j=1; j <=word2.length(); j++){
if(word1[i-1]==word2[j-1]){
E[i][j] = minx(E[i][j-1]+1, E[i-1][j]+1, E[i-1][j-1]);
} else {
E[i][j] = minx(E[i][j-1]+1, E[i-1][j]+1, E[i-1][j-1]+1);
}
}
}
return E[word1.length()][word2.length()];
}
};