1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| 哈哈 k x j 下标k 0 1 2 3 4 5 6 7 8 9 10 11 12 13 数组p a b a b c a b c d a b c d e next数组 -1 0 0 1 2 0 1 2 0 0 1 2 0 0
j++ 下标0 = a 当 j = 3: 下标j-1=2 -> a 可以找到 a、aba、a 但是aba不满足条件 => 1 当 j = 4: 下标j-1=3 -> b 可以找到 ab、abab 但是abab不满足条件 => 2 当 j = 5: 下标j-1=4 -> c 可以找到 ababc 不满足条件 => 0
哈哈 k x j 下标k 0 1 2 3 4 5 6 7 8 9 10 11 12 13 数组p a b a b c a b a d a b c d e next数组 -1 0 0 1 2 0 1 2 3 0 1 2 0 0
已知条件: 以0下标(必须0下标)开始,以j-1下标结束的两个相同子串 p[0]..p[k-1] = p[x]..p[j-1] 得出: => k-1-0 = j-1-x => k = j-x => x = j-k ==> p[0]..p[k-1] = p[j-k]..p[j-1] 假设:p[k] = p[j] => p[0]..p[k] = p[j-k]..p[j] 所以 next[j] = k
k-1 = next[j-1] p[0]..p[k-1] = p[x]..p[j-1] 假设:p[k] = p[j] p[0]..p[k-1]p[k] = p[x]..p[j-1]p[j] p[0]..p[k] = p[j-k]..p[j] k = next[j]
|