知识点 | 栈 |
---|---|
运行时间限制 | 10M |
内存限制 | 128 |
输入 | 输入两个字符串 |
输出 | 输出相似度,string类型 |
样例输入 | abcdef abcdefg |
样例输出 | 1/ |
#include <iostream>
#include <string>using namespace std;
int Min(int x,int y)
{
return (x>y) ? y:x;
}
int StringDistance(string A,int pa,int lenA,string B,int pb,int lenB)
{
if(pa>=lenA) // A串为空时
{
if(pb>=lenB)
return 0;
else
return lenB-pb;
}
if(pb>=lenB) // B串为空时
{
if(pa>=lenA)
return 0;
else
return lenA-pa;
}
if(A[pa]==B[pb])
return StringDistance(A,pa+1,lenA,B,pb+1,lenB);
else
{
int t1= StringDistance(A,pa+1,lenA,B,pb,lenB);
int t2= StringDistance(A,pa+1,lenA,B,pb+1,lenB);
int t3= StringDistance(A,pa,lenA,B,pb+1,lenB);
return Min(Min(t1,t2),t3)+1;
}
}
int main()
{
string a,b;
cin>>a>>b;
int distance=StringDistance(a,0,a.size(),b,0,b.size());
cout<<"1/"<<distance+1<<endl;
}
本题采用的是递归算法,类似的还有汉诺塔问题