题目描述
小蓝拥有两个字符串S,T。他希望通过如下操作使得字符S转换为字符串T。
操作有一下三种:
- 删除一个字符。
- 插入一个字符。
- 将一个字符改为另一个字符。
问最少需要操作多少次才可以使得字符串S转换为字符串T。
输入描述
输出描述
输出一个整数表示答案。
输入输出样例
输入:
abc
aa
输出:
2
最终代码c/c++
#include<bits/stdc++.h>
using namespace std;
int dp[3005][3005],m,n;
char a[3005],b[3005];
void solve()
{
dp[0][0]=0;
for(int i=1;i<=m;i++) dp[i][0]=i;
for(int j=1;j<=n;j++) dp[0][j]=j;
for(int i=1;i<=m;i++)
for(int j=1;j<=n;j++)
{
if(a[i] == b[j])
dp[i][j] = dp[i-1][j-1];
else
dp[i][j]=min(min(dp[i-1][j],dp[i][j-1]),dp[i-1][j-1])+1;
}
}
int main()
{
scanf("%s %s",a+1,b+1); //a[0],b[0]不用
m = strlen(a+1);
n = strlen(b+1);
solve();
printf("%d\n",dp[m][n]);
}
过程理解