1041 - 字符串匹配1
给你一个字符串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
C语言解答
#include<stdio.h> #include<string.h> void sort_string(char a[]) { int i,j,len=strlen(a); char t; for(i=0;i<len;i++) { for(j=i+1;j<len;j++) { if(a[i]>a[j]) { t=a[i]; a[i]=a[j]; a[j]=t; } } } } int main() { char mstr[1001],sstr[101],temp[101]; while(scanf("%s",mstr)!=EOF) { scanf("%s",sstr); int i,endpos,mlen=strlen(mstr),slen=strlen(sstr); int count=0; sort_string(sstr); //printf("@@%s\n",sstr); for(i=0;i<=mlen-slen;i++) { endpos=i+slen; char t=mstr[endpos]; mstr[endpos]='\0'; strcpy(temp,&mstr[i]); mstr[endpos]=t; sort_string(temp); //printf("!!%s\n",temp); if(strcmp(temp,sstr)==0) count++; } printf("%d\n",count); } return 0; }
C++解答
#include<cstdio> #include<string> using namespace std; int main() { char a[1001],b[101]; string A,B,C,D; int i,j,la,lb,s; while(scanf("%s%s",a,b)!=EOF) { A=a; B=b; la=A.length(); lb=B.length(); for(s=i=0;i<la;i++) { C=A.substr(i,lb); for(j=0;j<lb;j++) { D=B.substr(j); D.append(B,0,j); if(C==D) { s++; break; } } } printf("%d\n",s); } return 0; }