Given a string A which can be represented as A1A2..An (n is the length of A) and a string B which can be represented as B1B2..Bm (m is the length of B), you will need to find the occurrence of B from A.
The definition of occurrence is as follows:
If there exists an index p (p >= 1 and p + m <= n), and ApAp+1..Ap+m-1 matches with any rotation of B (B1B2..Bm-1Bm, B2B3..BmB1, ��, BmB1..Bm-2Bm-1 are all the rotation of B), we call it is an occurrence of B from A.
Input:
This problem contains multiple test cases. Each test case contains two lines, which are the strings A and B. The length of A is not greater then 1000 and the length of B is not greater than 100. All the strings are only consist of lowercase letters.
Output:
Each test should output an integer indicating the occurrence of B from A in a single line.
Sample Input:abab ab aaaa a aaaa aaSample Output:
3 4 3
之前看错题 用全排 各种超时
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
int main()
{
char a[1005],b[105],c[105];
int l,k,i,j,ans;
while(gets(a))
{
gets(b);
l=strlen(b);
k=strlen(a);
ans=0;
for(i=0;i<=k-l;i++)
{
for(j=0;j<l;j++)
{
strncpy(c+j,b,l-j);
strncpy(c,b+l-j,j);
if(strncmp(a+i,c,l)==0)
{
ans++;
break;
}
}
}
printf("%d\n",ans);
}
return 0;
}