文章
12
粉丝
0
获赞
12
访问
626
#include<bits/stdc++.h>
using namespace std;
const int N = 1010;
int dp[N][N];//dp[i][j]:将a的前i个字符变成b的前j个字符所需的最短步数;
int my_min(int a, int b, int c){
int res = min(a,b);
res = min(res,c);
return res;
}
int main(){
string a,b;
cin>>a>>b;
for(int j = 0; j <= b.size(); j++)
dp[0][j] = j;
for(int i = 0 ; i <= a.size(); i++)
dp[i][0] = i;
//dp[i-1][j-1] 将a的前i-1个字符变成b的前j-1个字符所需的最短步数 -> 修改a的最后一个
//dp[i-1][j] 将a的前i-1个字符变成b的前j个字符所需的最短步数 -> 删除a的最后一个
//dp[i][j-1] 将a的前i个字符变成b的前j-1个字符所需的最短步数 -> 在a的最后插入一个和b一样的
for(int i = 1; i <= a.size(); i++){
for(int j = 1; j <= b.size(); j++){
if(a[i-1] == b[j-1])
dp[i][j] = dp[i-1][j-1];
else{
int replace_op = dp[i-1][j-1];
int delete_op = dp[i-1][j];
int insert_op = dp[i][j-1];
dp[i][j] = my_min(replace_op,delete_op,insert_op) + 1;
}
}
}
cout<<dp[a.size()][b.size()]<<endl;
}
登录后发布评论
暂无评论,来抢沙发