字符串匹配
题目描述给你一个字符串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 结果:答案正确