【问题描述】
设A和B是两个字符串。我们要用最少的字符操作次数,将字符串A转换为字符串B。这里所说的字符操作共有三种:
- 删除一个字符
- 插入一个字符
- 将一个字符改为另一个字符
对任意的两个字符串A和B,计算出将字符串A变换为字符串B所用的最少字符操作次数。
【输入格式】
第一行为字符串A;第二行为字符串B;字符串A和B的长度均小于2000。
【输出格式】
只有一个正整数,为最少字符操作次数。
【输入输出样例 1】
input
sfdqxbw
gfdgw
output
4
时间限制:1s
空间限制:128MB
题解
这一题是DP标程,容易理解,直接看代码和注释↓
#include<bits/stdc++.h>
using namespace std;
char s1[2001],s2[2001];
int dp[2001][2001];
int main()
{
scanf("%s",s1);
scanf("%s",s2);
int n=strlen(s2),m=strlen(s1),i,j;
for(i=1;i<=n;i++)
dp[i][0]=i;
for(j=1;j<=m;j++)
dp[0][j]=j;//初始化
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
dp[i][j]=s1[j-1]==s2[i-1]?dp[i-1][j-1]:min(dp[i-1][j-1],min(dp[i-1][j],dp[i][j-1]))+1;//三目运算,可自改
printf("%d",dp[n][m]);
return 0;
}