题目链接:
题意:给你一个字符串,计算其所有前缀在该字符串出现的次数的总和。
思路:next[j]=i,代表s[1...i]==s[j-i+1....j],设f[i]表示以s[i]结尾的子串总共含前缀的数量,f[j]=f[i]+1,即以i结尾的子串中含前缀的数量加上前j个字符这一前缀。
#include#include #include using namespace std;const int MOD=10007;const int MAX=200005;char s[MAX];int next[MAX],n,f[MAX];void getNext(char s[],int len,int next[]){ next[0]=-1; int i=0,j=-1; while(i