给定两个字符串S和T,对于T我们允许三种操作:
(1) 在任意位置添加任意字符
(2) 删除存在的任意字符
(3) 修改任意字符
问最少操作多少次可以把字符串T变成S?
我只能说好巧妙、
代码
#include<bits/stdc++.h>
#define LL long long
using namespace std;
const int MAXN = 1000+10;
const int MAXM = 1e5;
char a[MAXN],b[MAXN];
int dp[MAXN][MAXN];
int main(){
scanf("%s %s",a+1,b+1);
int lena=strlen(a+1);
int lenb=strlen(b+1);
for(int i=0;i<=max(lena,lenb);i++) dp[i][0]=dp[0][i]=i;
for(int i=1;i<=lena;i++){
for(int j=1;j<=lenb;j++){
if(a[i]!=b[j])
dp[i][j]=dp[i-1][j-1]+1;
else
dp[i][j]=dp[i-1][j-1];
dp[i][j]=min(dp[i][j],min(dp[i-1][j]+1,dp[i][j-1]+1));
}
}
printf("%d\n",dp[lena][lenb]);
return 0;
}