4042:Rabin-Karp字符串匹配
-
时间限制:
- 1000ms
- 65536kB
-
描述
-
现在有一个仅由小写字母组成的字符串S,假定将字母a,b,c...z依次编号为1,2,3...26,现在要在S中找到所有长度为m的且字母编号和为q的子串。
输入
-
第一行输入N,表示测试数据的个数,以下N行每行包含一个测试数据
一行测试数据由三部分组成:字符串S(长度不超过100)、m(m小于S的长度)、q。
输出
-
输出符合条件的子串个数
后面每行输出一个相应的子串
样例输入
-
1 abcabc 3 6
样例输出
-
4
abc
bca
cab
abc
源码(OpenJudge通过)
#include"stdio.h"
#include"string.h"
#define N 100
int main()
{
int count,m,q,len;
int i,j,k,sum;
char str[N];
int flag[N];
scanf("%d",&count);
while(count >0)
{
scanf("%s",str);
scanf("%d",&m);
scanf("%d",&q);
len=strlen(str);
sum=0;
k=0;
for(i=0;i<len;i++)
{
for(j=i;j<i+m;j++)
{
sum = sum + (int)str[j] - 96;
}
if(sum==q)
{
flag[k]=i;
k++;
}
sum=0;
}
printf("%d\n",k);
for(i=0;i<k;i++)
{
for(j=flag[i]; j<flag[i]+m; j++)
printf("%c",str[j]);
printf("\n");
}
count--;
}
return 0;
}