文章

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;
	
}

 

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发