Compare commits
2 Commits
5edfe37a46
...
c1da2bd955
Author | SHA1 | Date | |
---|---|---|---|
c1da2bd955 | |||
e298c3a1a5 |
1
.gitignore
vendored
1
.gitignore
vendored
@ -13,3 +13,4 @@ target
|
|||||||
/.idea
|
/.idea
|
||||||
/resources/debug.log
|
/resources/debug.log
|
||||||
*.iml
|
*.iml
|
||||||
|
budd-common/.settings
|
||||||
|
@ -83,15 +83,19 @@ public class Kmp {
|
|||||||
next[0] = 0;
|
next[0] = 0;
|
||||||
int k = 0; // 表示前后缀相匹配的最大长度
|
int k = 0; // 表示前后缀相匹配的最大长度
|
||||||
|
|
||||||
|
// 根据已知 next 数组的前 i-1 位推测第 i 位
|
||||||
for (int i = 1; i < m; ++i) {
|
for (int i = 1; i < m; ++i) {
|
||||||
// k 为 b[0, i-1] 子串最大匹配前、后缀长度
|
|
||||||
// b[0, k] 为 b[0, i-1] 子串最大匹配前缀子串
|
|
||||||
while (k != 0 && b[k] != b[i]) {
|
while (k != 0 && b[k] != b[i]) {
|
||||||
// 若:b[k] != b[i],则求 b[0, i] 子串最大匹配前、后缀长度问题转换成了求 b[0, k] 子串最大匹配前、后缀长度问题
|
// k 为 b[0, i) 子串最大匹配前后缀长度
|
||||||
|
// b[0, k) 为 b[0, i) 子串最大匹配前缀子串
|
||||||
|
|
||||||
|
// 若:1、b[k] != b[i],则求 b[0, i] 子串最大匹配前后缀长度问题
|
||||||
|
// 转换成了求 b[0, k) 子串最大匹配前后缀长度问题
|
||||||
|
// 循环直到 b[k] == b[i] (下一步处理) 或 k == 0
|
||||||
k = next[k];
|
k = next[k];
|
||||||
}
|
}
|
||||||
|
// 若:2、b[k] == b[i],则 b[0, i] 子串最大匹配前后缀长度为 k + 1
|
||||||
if (b[k] == b[i]) {
|
if (b[k] == b[i]) {
|
||||||
// 若:b[k] == b[i],则 b[0, i] 子串最大匹配前、后缀长度为 k + 1
|
|
||||||
++k;
|
++k;
|
||||||
}
|
}
|
||||||
next[i] = k;
|
next[i] = k;
|
||||||
|
Loading…
Reference in New Issue
Block a user