编辑距离 dp

来源:互联网 发布:陈翔6点半之网络大电影 编辑:程序博客网 时间:2024/05/22 04:41

求一个串变换成另一个串的最小步数:删除是一步,增加是一步,更改是一步;

#include<cstdio>#include<algorithm>#include<iostream>#include<cstring>#include<string>#include<cmath>using namespace std;#define N 100000int ptr[10000][1000];char a[100],b[100];int min(int a, int b){    return a < b ? a : b;}int edit( ){    int i,j;    int max1 = strlen(a);    int max2 = strlen(b);    for(int i = 0 ;i < max1 + 1 ;i++)    {        ptr[i][0] = i;    }    for(int i = 0 ;i < max2 + 1;i++)    {        ptr[0][i] = i;    }    for(int i = 1 ;i < max1 + 1 ;i++)    {        for(int j = 1 ;j< max2 + 1; j++)        {            int d;            int temp = min(ptr[i-1][j] + 1, ptr[i][j-1] + 1);            if(a[i-1] == b[j-1])            {                d = 0 ;            }            else            {                d = 1 ;            }            ptr[i][j] = min(temp, ptr[i-1][j-1] + d);        }    }    int dis = ptr[max1][max2];    return dis;}int main(){    scanf("%s",a);    scanf("%s",b);    int r=edit();    cout<<r<<endl;}
原创粉丝点击