Compare commits

..

No commits in common. "c1da2bd955fb740f74f58ddec90410e2f03622b3" and "5edfe37a46501cbe8781193aa1f1fad4c88dafdc" have entirely different histories.

2 changed files with 5 additions and 10 deletions

3
.gitignore vendored
View File

@ -12,5 +12,4 @@ target
/useful-code.iml /useful-code.iml
/.idea /.idea
/resources/debug.log /resources/debug.log
*.iml *.iml
budd-common/.settings

View File

@ -83,19 +83,15 @@ 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]) {
// k 为 b[0, i) 子串最大匹配前后缀长度 // 若b[k] != b[i],则求 b[0, i] 子串最大匹配前、后缀长度问题转换成了求 b[0, k] 子串最大匹配前、后缀长度问题
// 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;