Sample Input
1
4
abab
Sample Output
6
输出包括从1到len长 字符串前缀的总个数
abab:包括2个a,2个ab,1个aba,1个abab
1 # include <cstdio> 2 # include <cstring> 3 using namespace std; 4 5 char S[200010] ; 6 int next[200010] ; 7 int dp[200010] ; 8 int len ; 9 10 void getNext() 11 { 12 int j, k; 13 j = 0; k = -1; next[0] = -1; 14 while(j < len) 15 if(k == -1 || S[j] == S[k]) 16 next[++j] = ++k; 17 else 18 k = next[k]; 19 } 20 21 int main () 22 { 23 int T ; 24 scanf("%d" , &T); 25 while (T--) 26 { 27 scanf("%d" , &len) ; 28 scanf("%s" , S) ; 29 getNext() ; 30 dp[0] = 0 ; 31 int ans = 0 ; 32 int i ; 33 for (i = 1 ; i<= len ; i++) 34 { 35 dp[i] = dp[next[i]] + 1 ; 36 dp[i] %= 10007 ; 37 ans += dp[i] ; 38 ans %= 10007 ; 39 } 40 printf("%d " , ans) ; 41 42 43 } 44 45 46 return 0 ; 47 }