模式串
S = “abaabcac”
next[]求法:
- 所有数组下标从1开始,首先将设置next[1] = 0;next[2] = 1;
- 从下标3开始,判断 S[i-1]==S[next[i-1]]
如果成立,则 next[i] = next[i-1]+1;
如果不成立,则判断 S[i-1]==S[next[next[i-1]]];
重复此步骤,直至成立。
如果找到第一位还不成立,则next[i] = 1;
nextval[]求法:
- 求出 next[],数组下标从1开始,将 nextval[1] 设置为 0;
- 从下标 2 开始,判断 S[i] == S[next[i]];
如果相等,则 nextval[i] = nextval[next[i]];
如果不相等,则 nextval[i] = next[i];
S | a | b | a | a | b | c | a | c |
---|---|---|---|---|---|---|---|---|
next | 0 | 1 | 1 | 2 | 2 | 3 | 1 | 2 |
nextval | 0 | 1 | 0 | 2 | 1 | 3 | 0 | 2 |