字符串匹配
题目描述给你一个字符串A和一个字符串B,请你计算字符串B的所有旋转形式在字符串A中的出现总次数。
说明:
如果将字符串B描述成B1B2...Bm的形式(m是B的长度),那么B1B2...Bm-1Bm,B2B3...BmB1,...,BmB1...Bm-2Bm-1就是字符串B的所有旋转形式。
输入
输入包含多组测试数据。每组输入为两行,第一行输入字符串A,第二行输入字符串B。A的长度不超过1000,B的长度不超过100,所有字符串仅包含小写字母。
输出
对于每组输入,输出字符串B的所有旋转形式在字符串A中的出现总次数。
样例输入
abab
ab
aaaa
a
aaaa
aa
样例输出
3
4
3
我的代码:
程序代码:#include <stdio.h>
#include <string.h>
char a[1005];
int main(){
char b[105],*p=b,t;
int i,j,k,m,cnt,lena,lenb,flag;
while(scanf("%s%s",a,b)!=EOF){
cnt=0; flag=1;
lenb=strlen(b);
//字符串b中的元素完全相同
for(i=0;i<lenb-1;i++)
if(b[i]!=b[i+1])
flag=0;
if(flag){
m=k=0;
while(m<lenb){
while(1){
p=strstr(&a[k],b);
if(p){
k+=lenb;
cnt++;
}
else
break;
}
m++;
k=m;
}
printf("%d\n",cnt);
continue;
}
//字符串b中的元素不完全相同
i=0;
while(i<lenb){
k=0;
while(1){//此时状态的字符串b,在字符串a中有多少子串
p=strstr(&a[k],b);
if(p){
cnt++;
k=p-&a[0]+1;
}
else
break;
}
i++;
//反转字符串b
if(i<lenb){
t=b[lenb-1];
for(j=lenb-1;j>=0;j--)
b[j]=b[j-1];
b[0]=t;
}
}
printf("%d\n",cnt);
}
return 0;
}为什么答案错误?
下面是给的提交反馈:
测试文件:/test.out 结果:答案错误
=======原因======
当参考答案输出:
901
-------时---------
你的程序输出:
45050
=================
测试文件:/sample.out 结果:答案正确


