AGTC
程序员文章站
2022-06-30 20:45:21
...
思路
最后要初始化一下dp数组的边界。
代码
#include <cstring>
#include <iostream>
#include <algorithm>
#include <cstdio>
using namespace std;
const int N=1e3+5;
int dp[N][N];
char s[N];
char p[N];
int main(){
int n,m;
while(cin >> n >> s+1 >> m >> p+1){
memset(dp,0,sizeof dp);
for(int i=0;i<=m;i++){//如果i==0或者j==0的时候,操作数都是删除的,次数等于i或者j的大小
dp[0][i]=i;
}
for(int i=0;i<=n;i++){
dp[i][0]=i;
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(s[i]==p[j]){
dp[i][j]=dp[i-1][j-1];
}else{
dp[i][j]=min(dp[i-1][j-1],min(dp[i-1][j],dp[i][j-1]))+1;
}
}
}
cout << dp[n][m] << endl;
}
}