- 调用子函数之前
在主函数中,声明一个与字符串s长度相同的数组next。
int next[s.size()];
- 获取 next 数组
全部代码如下:
void getNextstring(int *next, string &s)
{
int j = -1;
next[0] = -1;
for(int i = 1; i < s.size(); i++)
{
while(j >= 0 && s[j+1] != s[i])
{
j = next[j];
}
if(s[j + 1] == s[i])
{
j++;
}
next[i] = j;
}
}
具体顺序/ 思路:
- 确定 j = -1(使用前缀表减一)
- 初始化 next[0] = -1
- 从 s[1] 开始遍历
- 如果 s[j + 1] == s[i],i 和 j 同时往后移
- 为 next[i] 赋值,表示以 s[i] 为结尾的子串的最长相同前后缀 -1
- 如果 s[j + 1] != s[i],一直回退
应用:力扣 28. 实现 strStr()。