标签:char 基础 test which ase pac bsp desc 长度
1 4 ababSample Output
6
题意为: 求每个前缀在字符串中出现的次数之和
分析:Next数组在KMP中的定义是 前缀和后缀的最大公共长度.
设ans为所求值 ans至少为len ,遍历Next数组,每次Next长度不为0时 就说明和前缀有公共部分 ans++;
代码如下:
#include <cstdio> #include <iostream> #include <cstring> using namespace std; const int N = 1000002; int Next[N]; char S[N], T[N]; int slen, tlen;//注意每次一定要计算长度 const int MOD=1e4+7; void getNext() { int j, k; j = 0; k = -1; Next[0] = -1; while(j < tlen) if(k == -1 || T[j] == T[k]) Next[++j] = ++k; else k = Next[k]; } int main() { int t; scanf("%d",&t); while(t--) { scanf("%d",&tlen); scanf("%s",T); getNext(); int ans=tlen%MOD; for(int i=2;i<=tlen;i++){ if(Next[i]>0) ans=(ans+1)%MOD; } printf("%d\n",ans); } return 0; }
HDU 3336 Count the string (基础KMP)
标签:char 基础 test which ase pac bsp desc 长度
原文地址:http://www.cnblogs.com/a249189046/p/7436377.html