您的位置:首页 > 其它

HDU 3336 Count the string

2010-04-16 10:53 232 查看
http://acm.hdu.edu.cn/showproblem.php?pid=3336

题目大意:这道题的意思就是给你一个字符串,从中可以分离出n个的子串,统计这n个子串在字符串出现次数的和,再把结果对10007求余。

解题思路:

例如:字符串 abcdabca

它的子串有:

a

ab

abc

abcd

abcda

abcdab

abcdabc

abcdabca

我们发现每个子串都是在之前子串的基础上增加一个字符,并且第一个字符都是a,则我们就在字符串中先搜索到a的位置,记为j,i=0,然后比较接下来的字符是否匹配,匹配则继续移动两个下标,直到不匹配。匹配的子串长度就是存在有几个的子串匹配。

#include <stdio.h>
#define size 200001

char s[size];
int next[size];
int len;

int main()
{
int NumOfTest,i,j,count,locate;
scanf("%d",&NumOfTest);
while (NumOfTest--)
{
scanf("%d",&len);
scanf("%s",s);
count = len;
i = 0,j = 1;
while (i!=len&&j!=len)
{
if(s[i] == s[j])
{
locate = j;   /*记录匹配字串的起始位置*/
while (s[i]==s[j])/*比较匹配前k个的字串*/
{
i++;
j++;
}
count+=(j-locate>0?j-locate:1);
}
else
j++;
}
printf("%d/n",count);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: