package
0.0.0-20241220224003-b7cf03a90b2b
Repository: https://github.com/szhou12/leetcode-go.git
Documentation: pkg.go.dev
# README
459. Repeated Substring Pattern
Solution idea
My Solution
Naive Approach: 所有的以第一个字母为开始的substring挨个试一遍, 找到一个就返回true
Time complexity = $O(n^2)$
Better Solution: 移动拼接
s+s
- 如果
s
有重复的substr
, 那么既然前面有相同的子串,后面有相同的子串,用s + s
,这样组成的字符串中,后面的子串做前串,前面的子串做后串,就一定还能组成一个s
- 所以判断字符串
s
是否有重复子串组成,只要两个s
拼接在一起,里面还出现一个s
的话,就说明是由重复子串组成。 - 注意!我们在判断
s + s
拼接的字符串里是否出现一个s
的的时候,要刨除s + s
的首字符和尾字符,这样避免在s + s
中搜索出原来的s
,我们要搜索的是中间拼接出来的s
。
Optimal Solution: KMP
- 在一个String中查找是否出现过另一个String,这是KMP的看家本领!
Resource
移动匹配解法 & KMP解法: 代码随想录-459.重复的子字符串