/*
在最终状态都是A串转换到B串
可以进行修改,删除和添加,dp[i-1][j]是把第一个串的当前字符删除,
这样就是搜到上一个字符的操作数+1,dp[i][j-1]+1是在上一种状态下把串1
添加到第二个串上,操作数+1
*/
#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
int m;
int dp[4001][4001];
char a[5000];
char b[5000];
int main()
{
cin >>a>>b;
int lena = strlen(a);
int lenb = strlen(b);
dp[0][0] = 0;//初始化,如果两个串都长度为0,那么操作数为0,如果只有一个串有长度,那么肯定是把它添加到另一个串,操作数为串的长度
for(int i = 1; i <= lena ; i++)
dp[i][0] = i;
for(int j = 1; j <= lenb ; j++)
dp[0][j] = j;
for(int i = 1; i <= lena; i ++)
for(int j = 1; j <= lenb; j ++)
{
if(a[i-1] != b[j-1])//当前搜到的字符不相等
dp[i][j] = min(min(dp[i-1][j]+1,dp[i][j-1]+1),dp[i-1][j-1]+1);
else
dp[i][j] = dp[i-1][j-1];//相等操作数不变
}
cout <<dp[lena][lenb];
return 0;
}
codevs2598编辑距离问题
最新推荐文章于 2019-08-25 11:32:47 发布