注
发布时间
阅读量:
阅读量
题意解析
提供一个长度为n的长字符串,“完美子串”指的是同时作为该字符串前缀和后缀的子串,目标是计算所有“完美子串”的数量,并统计这些子串在原字符串中出现的次数
1、 利用常规KMP算法中的next数组,可以确定完美子串的数量。首先,原字符串自身即为一个完美子串。
设定字符串长度为n,随后借助next数组进行反复回溯,
int perfect = 0; //完美子串的数量
int k = n;
while(k)
{
len[++len_cnt] = k; // 完美子串的长度
++perfect;
k = Next[k];
}
2、 通过拓展KMP算法,可获取与自身前缀相匹配的子串。
z[] 数组的含义为:z[i] 表示字符串s与其从i位置开始至末尾的子串之间的最长公共前缀长度。
3、 结构体数组LCP[i]用于存储长度为i的子串对应的长度值len,以及在所有子串中长度不小于len的数量信息
struct node
{
int len; // z[i] = len 时候
int cnt;
全部评论 (0)
还没有任何评论哟~
