codevs2598编辑距离问题

来源:互联网 发布:网络转账骗局怎么处理 编辑:程序博客网 时间:2024/05/01 15:11
/*        在最终状态都是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;}
1 0