计算字符串的相似度【转自编程之美】
#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