51nod--1183 编辑距离

来源:互联网 发布:楼凤阁 源码 编辑:程序博客网 时间:2024/06/05 16:13


https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1183

思路:

之前做个这道题,当时就感觉此题很像最长公共子序列,今天重新做51nod里想了一次,思路是相同的,一开始初始数组,最长公共子序列是0到N有多少个相同

这个是0到N需要转化多少步 那自然也就是N步了

按着这个思路 a - > b  的a数组前i个与b数组前j个需要几步转化,相同思路,类比

#include <iostream>#include <stdio.h>#include <cstring>using namespace std;int table[1005][1005];char a[1005];char b[1005];void solve(){    for(int i=0;i<=1001;i++)    {        table[i][0]=i;        table[0][i]=i;    }    int lena=strlen(a);    int lenb=strlen(b);    for(int i=1;i<=lena;i++)    {        for(int j=1;j<=lenb;j++)        {            if(a[i-1]==b[j-1])                table[i][j]=table[i-1][j-1];            else            {                table[i][j]=min(min(table[i-1][j],table[i][j-1]),table[i-1][j-1])+1;            }        }    }       printf("%d\n",table[lena][lenb]);}int main(){    gets(a);    gets(b);    solve();    return 0;}


0 0