C++求两个字符串的相似度?
题目详见:http://poj.grids.cn/problem?id=2678
请附带说明:
补充:如果在poj上能过的请再贴上来吧,请说明一下结构,思想。谢谢!
题目详见:http://poj.grids.cn/problem?id=2678
请附带说明:
补充:如果在poj上能过的请再贴上来吧,请说明一下结构,思想。谢谢!
答案:#include<iostream>
using namespace std;
int main()
{
int Compare(char *p,char *q,int n);
char str1[21],str2[21];
char *p,*q;
cout<<"Please input str1:";
cin>>str1;
cout<<"Please input str2:";
cin>>str2;
int length;
if(strlen(str1)>=strlen(str2)) //保证p的长度要比q的长度长
{
length=strlen(str2);
p=str1;
q=str2;
}
else
{
length=strlen(str1);
p=str2;
q=str1;
}
int i;
for(i=length;i>0;i--)
if(Compare(p,q,i)==1)
break;
cout<<i;
}
int Compare(char *p,char *q,int n) //比较p和q中有没有相同的n长序列
{
int i,j,k;
int flag;
for(i=0;i<=strlen(q)-n;i++)
{
for(j=0;j<=strlen(p)-n;j++)
{
flag=1;
k=0;
while(flag==1)
if(*(q+i+k)==*(p+k+j))
{
k++;
if(k==n)
return 1;
}
else
flag=0;
}
}
return 0;
}楼上的不符合题目输入输出要求
而且按楼上的方法应该会超时
猜 得用模式匹配不对吧?
像BCAD和CADBCCAAD,按你的程序只有2,实际是3.每次你只从第一个开始比较,遗漏了后面的极端情况