File tree Expand file tree Collapse file tree 1 file changed +10
-17
lines changed Expand file tree Collapse file tree 1 file changed +10
-17
lines changed Original file line number Diff line number Diff line change @@ -80,30 +80,23 @@ return -1
80
80
81
81
因此我们必须设计出口,并返回 -1。问题的我们的上界是什么呢?
82
82
83
- 这里有个概念叫** 解空间** 。这是一个很重要的概念。 我举个简单的例子。 你要在一个数组 A 中找某一个数的索引,题目保证这个数字一定在数组中存在。那么这道题的解空间就是** [ 0, n -1] ** ,其中 n 为数组长度。你的解不可能在这个范围外。
83
+ 这里有个概念叫** 解空间** 。这是一个很重要的概念。 我举个简单的例子。 你要在一个数组 A 中找某一个数的索引,题目保证这个数字一定在数组中存在。那么这道题的解空间就是 ** [ 0, n -1] ** ,其中 n 为数组长度。你的解不可能在这个范围外。
84
84
85
- 回到本题,如果 a 经过 n 次可以匹配成功, 那么最终 a 的长度范围是 [ len(b), 2 * len(a) + len(b)] ,下界是 len(b) 容易理解, 关键是上界 。
85
+ 回到本题,如果 a 经过 n 次可以匹配成功, 那么最终 a 的长度范围是 [ len(b), 2 * len(a) + len(b)] 。
86
86
87
- 还是以上面的例子来说 。
87
+ 下界是 len(b) 容易理解, 关键是上界 。
88
88
89
- ```
90
- a = "abcabcabcabc"
91
- b = "abac"
92
- ```
93
-
94
- abac 如果可以在其中匹配到,一定是以下几种情况:
95
-
96
- ![ ] ( https://tva1.sinaimg.cn/large/0081Kckwly1gk5a36n5qqj310106s0t6.jpg )
97
-
98
- ![ ] ( https://tva1.sinaimg.cn/large/0081Kckwly1gk5a4md3eyj30xv04y74n.jpg )
89
+ 假设 a 循环 n 次可以包含 b。那么必定属于以下几种情况中的一种:
99
90
100
- 临界情况就是:
91
+ > 循环次数下界为 len(b) + len(a ) - 1 / len(a)
101
92
102
- ![ ] ( https://tva1.sinaimg.cn/large/0081Kckwly1gk5ah357i0j30wx07v754.jpg )
93
+ 1 . 循环 n 次正好匹配。 比如 a = 'abc', b = 'abcabcabcabcabc'(5 个 abc)。循环 5 次恰好匹配,这五次循环其实就是上面提到到** 下界**
94
+ 2 . 第 n 次循环恰好匹配,这个时候第 n 次循环的前 k 个字符必定匹配(其中 0 < k <= len(a)),比如 a = 'abc', b = 'abcabcab'。第三次匹配正好匹配,且匹配了 abc 中的前两个字符 ab,也就是说比下界** 多循环一次** 。
95
+ 3 . 再比如: a = "ab", b = "bababa",那么需要循环 5 次 变成 a** babababa** b(粗体表示匹配 b 的部分),其中 3 次是下界,也就是说比下界多循环了** 两次** 。
103
96
104
- ![ ] ( https://tva1.sinaimg.cn/large/0081Kckwly1gk5aft6jkhj308c03faa3.jpg )
97
+ 除此之前没有别的可能。
105
98
106
- 因此最终 a 的长度的临界值就是 2 \* len(a) + len(b)。** 超过这个范围再多次的叠加也没有意义。**
99
+ 可以看出实际上 n 不会大于 ** 下界次循环 + 2 ** , 因此最终 a 的长度的临界值就是 2 \* len(a) + len(b)。** 超过这个范围再多次的叠加也没有意义。**
107
100
108
101
## 关键点解析
109
102
You can’t perform that action at this time.
0 commit comments