先给个题目链接:
https://www.acwing.com/problem/content/description/904/
来看一下代码:
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 1010;
char a[N];
char b[N];
int f[N][N];
int m,n;
int main()
{
// cin>>m>>a+1>>n>>b+1;
scanf("%d%s%d%s", &m,a+1,&n,b+1);
//开始先将每个初始化
for(int i=1;i<=m;i++)
{
f[i][0]=i;//这个假如A串有i个字符串,B串有0个字符串,将A串转换为B串的话就需要删除i个字符串
}
for(int i = 1; i <= n; i ++ )
{
f[0][i]=i;//这里是指B串有i个字符串,而A串有0个字符串,将A转换为B串只需加一直添加字符串即可
}
//接下来进行动态规划
for(int i=1;i<=m;i++)
{
for(int j=1;j<=n;j++)
{
if(a[i]==b[j])
{
f[i][j]=f[i-1][j-1];
}
else
{
f[i][j]=min(f[i-1][j-1],min(f[i-1][j],f[i][j-1]))+1;
}
}
}
cout << f[m][n]<<endl;
return 0;
}