输入样例:
10
AGTCTGACGC
11
AGTAAGTAGGC
输出样例:
4
分析:
本题可以从三个方面进行讨论:
1.增加操作,说明s[i]==p[i-1]
2.删减操作,说明s[i-1]==p[i]
3.修改操作,说明s[i-1]==p[i-1]
代码演示:
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
const int N = 1010;
int n,m;
char s[N],p[N];
int dp[N][N];
int main(void)
{
scanf("%d%s",&n,s+1);
scanf("%d%s",&m,p+1);
for(int i=0;i<=n;i++) dp[i][0] = i;
for(int j=0;j<=m;j++) dp[0][j] = j;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
dp[i][j] = min(dp[i-1][j]+1,dp[i][j-1]+1);
if(s[i]==p[j]) dp[i][j] = min(dp[i][j],dp[i-1][j-1]);
else dp[i][j] = min(dp[i][j],dp[i-1][j-1]+1);
}
}
int ans = dp[n][m];
printf("%d",ans);
return 0;
}
感谢查看!