//用dis[i][j]来表示s1长度为i的子串和s2长度为j的子串的编辑距离
//if i == 0 且 j == 0,edit(i, j) = 0
//if i == 0 且 j > 0,edit(i, j) = j
//if i > 0 且j == 0,edit(i, j) = i
//if i >= 1 且 j >= 1 ,edit(i, j) == min{ edit(i-1, j) + 1, edit(i, j-1) + 1, edit(i-1, j-1) + f(i, j) }
//s1第i个字符与s2第j个字符相等是为0,不等时需要替换,为1
int min(int a, int b, int c) //求三个数的最小值
{
int min = a;
if(b < min)min = b;
if(c < min)min = c;
return min;
}
int distances(string s1, string s2)
{
int dis[s1.length() + 1][s2.length() + 1]; //下标范围是0到字符串的长度
dis[0][0] = 0;
//第一行与第一列都为0
for(int i = 1; i <= s2.length(); i++)dis[0][i] = i;
for(int i = 1; i <= s1.length(); i++)dis[i][0] = i;
for(int i = 1; i <= s1.length(); i++){
for(int j = 1; j <= s2.length(); j++){
int flag = s1[i - 1] == s2[j - 1] ? 0 : 1; //第i个字符下标为i-1
dis[i][j] = min(dis[i - 1][j] + 1, dis[i][j - 1] + 1, dis[i - 1][j - 1] + flag);
}
}
return dis[s1.length()][s2.length()];
}
72. Edit Distance Hard
最新推荐文章于 2024-10-07 07:09:00 发布