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
8080
8181因此我们必须设计出口,并返回 -1。问题的我们的上界是什么呢?
8282
83- 这里有个概念叫** 解空间** 。这是一个很重要的概念。 我举个简单的例子。 你要在一个数组 A 中找某一个数的索引,题目保证这个数字一定在数组中存在。那么这道题的解空间就是** [ 0, n -1] ** ,其中 n 为数组长度。你的解不可能在这个范围外。
83+ 这里有个概念叫** 解空间** 。这是一个很重要的概念。 我举个简单的例子。 你要在一个数组 A 中找某一个数的索引,题目保证这个数字一定在数组中存在。那么这道题的解空间就是 ** [ 0, n -1] ** ,其中 n 为数组长度。你的解不可能在这个范围外。
8484
85- 回到本题,如果 a 经过 n 次可以匹配成功, 那么最终 a 的长度范围是 [ len(b), 2 * len(a) + len(b)] ,下界是 len(b) 容易理解, 关键是上界 。
85+ 回到本题,如果 a 经过 n 次可以匹配成功, 那么最终 a 的长度范围是 [ len(b), 2 * len(a) + len(b)] 。
8686
87- 还是以上面的例子来说 。
87+ 下界是 len(b) 容易理解, 关键是上界 。
8888
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。那么必定属于以下几种情况中的一种:
9990
100- 临界情况就是:
91+ > 循环次数下界为 len(b) + len(a ) - 1 / len(a)
10192
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 次是下界,也就是说比下界多循环了** 两次** 。
10396
104- ![ ] ( https://tva1.sinaimg.cn/large/0081Kckwly1gk5aft6jkhj308c03faa3.jpg )
97+ 除此之前没有别的可能。
10598
106- 因此最终 a 的长度的临界值就是 2 \* len(a) + len(b)。** 超过这个范围再多次的叠加也没有意义。**
99+ 可以看出实际上 n 不会大于 ** 下界次循环 + 2 ** , 因此最终 a 的长度的临界值就是 2 \* len(a) + len(b)。** 超过这个范围再多次的叠加也没有意义。**
107100
108101## 关键点解析
109102
You can’t perform that action at this time.
0 commit comments