AcWing 902. 最短编辑距离
原题链接
简单
作者:
171800
,
2024-10-02 20:27:19
,
所有人可见
,
阅读 1
#include<iostream>
using namespace std;
const int N = 1010;
char a[N], b[N];
int alen, blen;
int f[N][N]; //f[i][j]表示字符串a前i个变到字符串b前j个的最少操作次数
int main(){
cin >> alen;
for(int i = 1; i <= alen; i++){
cin >> a[i];
//一并初始化了
f[i][0] = i;
}
cin >> blen;
for(int j = 1; j <= blen; j++){
cin >> b[j];
f[0][j] = j;
}
//比较最后一个字符,分两种情况:相同和不相同
//相同:f[i][j] = f[i - 1][j - 1]
//不相同,可以有三个:删除、插入和替换
//f[i][j] = 1 + min(f[i - 1][j], f[i][j - 1], f[i - 1][j - 1])
for(int i = 1; i <= alen; i++){
for(int j = 1; j <= blen; j++){
if(a[i] == b[j])
f[i][j] = f[i - 1][j - 1];
else{
f[i][j] = 1 + min(min(f[i - 1][j], f[i][j - 1]), f[i - 1][j - 1]);
}
}
}
cout << f[alen][blen];
return 0;
}