28. 實現(xiàn) strStr()
#1 自己看到題目的第一想法? ? ? ??
暴力解法。時間復雜度為n*m
#2 看完代碼隨想錄之后的想法? ?
KMP算了先不看了
459.重復的子字符串
#1 自己看到題目的第一想法
暴力验游,時間復雜度o(n*n)??
#2 看完代碼隨想錄之后的想法? ?
所以判斷字符串s是否有重復子串組成恶复,只要兩個s拼接在一起,里面還出現(xiàn)一個s的話弧械,就說明是又重復子串組成。
當然,我們在判斷 s + s 拼接的字符串里是否出現(xiàn)一個s的的時候雏吭,要刨除 s + s 的首字符和尾字符,這樣避免在s+s中搜索出原來的s陪踩,我們要搜索的是中間拼接出來的s杖们。
- 暴力解法是m * n,一般庫函數(shù)實現(xiàn)為 O(m + n)
如果我們做過?28.實現(xiàn)strStr?(opens new window)題目的話肩狂,其實就知道摘完,實現(xiàn)一個 高效的算法來判斷 一個字符串中是否出現(xiàn)另一個字符串是很復雜的,這里就涉及到了KMP算法婚温。
KMP先不看啦
#3 收獲
在做判斷字符串s是否有重復子串組成描焰,只要兩個s拼接在一起,里面還出現(xiàn)一個s的話栅螟,就說明是又重復子串組成
字符串總結
雙指針法:左右指針以及快慢指針荆秦,同時還有sliding window。
反轉(zhuǎn)系列:主要就是 while (l < r) [s[l], s[r]] = [s[r], s[l]] l++ r--
移除元素:主要就是加一個index力图,通過index++與否來在原字符上進行覆蓋 (數(shù)組上的元素步绸,不能真正的刪除,只能覆蓋)吃媒,最后再重新修改字符串的長度以刪減不需要的部分
KMP算法是字符串查找最重要的算法瓤介,通過減少已經(jīng)check過的substring來降低時間復雜度。
雙指針回顧
雙指針來提高效率赘那,一般是將O(n^2)的時間復雜度刑桑,降為O(n)。
n數(shù)之和是雙指針的經(jīng)典題目募舟。
note:針對很多數(shù)組(字符串)填充類的問題祠斧,都可以先預先給數(shù)組擴容帶填充后的大小,然后在從后向前進行操作拱礁。