luogu2758 编辑距离
时空限制 1000ms/128MB
题目描述
设A和B是两个字符串。我们要用最少的字符操作次数,将字符串A转换为字符串B。这里所说的字符操作共有三种:
1、删除一个字符;
2、插入一个字符;
3、将一个字符改为另一个字符;
!皆为小写字母!
输入输出格式
输入格式:
第一行为字符串A;第二行为字符串B;字符串A和B的长度均小于2000。
输出格式:
只有一个正整数,为最少字符操作次数。
输入输出样例
输入样例#1:
sfdqxbw
gfdgw
输出样例#1:
4
代码
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
const int N = 2005;
string a,b;
int f[N][N]; //f[i][j] a前i个字符变为b前j个字符最少步
int main(){
cin>>a>>b;
int len1=a.size(),len2=b.size();
for (int i=0; i<=len1; i++) f[i][0]=i; //删除i个字符
for (int i=0; i<=len2; i++) f[0][i]=i; //添加i个字符
for (int i=1; i<=len1; i++)
for (int j=1; j<=len2; j++)
if (a[i-1]==b[j-1]) f[i][j]=f[i-1][j-1]; //相同
else f[i][j]=min(min(f[i-1][j],f[i][j-1]),f[i-1][j-1])+1;
cout<<f[len1][len2]<<endl;
return 0;
}