计算字符串的相似度【转自编程之美】

#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;

int minValue(int a,int b,int c)
{
    int min=a;
    if(b<min)
        min=b;
    if(c<min)
        min=c;
    return min;
}

int CalStrDis(char strA[],int pABegin,int pAEnd,char strB[],int pBBegin,int pBEnd)
{
    if(pABegin>pAEnd)
    {
        if(pBBegin>pBEnd)
            return 0;
        else
            return pBEnd-pBBegin+1;
    }
    if(pBBegin>pBEnd)
    {
        if(pABegin>pAEnd)
            return 0;
        else
            return pAEnd-pABegin+1;
    }
    if(strA[pABegin]==strB[pBBegin])
    {
        return CalStrDis(strA,pABegin+1,pAEnd,strB,pBBegin+1,pBEnd);
    }
    else
    {
        int t1=CalStrDis(strA,pABegin,pAEnd,strB,pBBegin+1,pBEnd);
        int t2=CalStrDis(strA,pABegin+1,pAEnd,strB,pBBegin,pBEnd);
        int t3=CalStrDis(strA,pABegin+1,pAEnd,strB,pBBegin+1,pBEnd);
        return minValue(t1,t2,t3)+1;
    }
}

int main()
{
    freopen("dis.in","r",stdin);
    char strA[100],strB[100];
    while(gets(strA)&&gets(strB))
    {
        int dis=CalStrDis(strA,0,strlen(strA)-1,strB,0,strlen(strB)-1);
        cout<<dis<<endl;
    }
    return 0;
}

dis.in

xabcdae
xfdfa
a
b
abdd
aebdd
travelling
travelin

输出为:

5
1
1
2

posted @ 2013-07-06 19:11  hunterzhang  阅读(198)  评论(0编辑  收藏  举报