leetcode28_Implement strStr()
一.問題描述
Implement strStr().
Returns the index of the first occurrence of needle in haystack, or -1 if needle is not part of haystack.
二.程式碼編寫
最基本的想法就是,為兩個字串指定兩個指標,相同則兩個指標後移,不同則子串回退到0,母串往前回退i-j+1個字元。顯然,時間複雜度是O(mn),程式碼如下:
class Solution(object):
def strStr(self, haystack, needle):
"""
:type haystack: str
:type needle: str
:rtype: int
"""
len_hay = len(haystack)
len_nee = len(needle)
i = 0 # pointer for haystack
j = 0 # pointer for needle
while i < len_hay and j < len_nee:
if haystack[i] == needle[j]:
i += 1
j += 1
else:
i = i - j + 1
j = 0
if j == len_nee:
return i - len_nee
else:
return -1
三.演算法優化
以儘量減少冗餘計算來看待上述問題會發現,每次遇到不相同的字元時,兩個子串均向前回退,顯然造成了冗餘的計算量,有沒有辦法巧妙地記住已經比較過的規律,使每次回退的字元數減少呢?這就是KMP演算法的基本思想。
KMP演算法通過next()陣列,可以得到每次移動的長度,其時間複雜度為O(m+n)
相關文章
- [LeetCode] Implement strStr() 實現strStr()函式LeetCode函式
- 實現 strStr()
- strstr函式函式
- Leetcode Implement strStr()LeetCode
- C 庫函式 - strstr()函式
- 5. PHP 函式 strstr ()PHP函式
- Leetcode 28 Implement strStr()LeetCode
- 演算法strstr實現演算法
- Leetcode-Implement strStr()LeetCode
- Implement strStr() leetcode javaLeetCodeJava
- 每日一練(37):實現 strStr()
- (函式)實現strstr函式函式
- LeetCode-Implement strStr()-KMPLeetCodeKMP
- 子串查詢函式strstr函式
- LeetCode-028-實現 strStr()LeetCode
- [C練習]程式設計實現strstr程式設計
- 【LeetCode 28_字串_匹配】Implement strStr()LeetCode字串
- PHP字串函式之 strstr stristr strchr strrchrPHP字串函式
- Leetcode--28. 實現strStr()(JS版)LeetCodeJS
- 【leetcode】28. Implement strStr() 字串匹配KMP BMLeetCode字串匹配KMP
- C 標準庫 – string.h之strstr使用
- 【LeetCode從零單排】No28 Implement strStr()LeetCode
- C語言-字串函式的實現(五)之strstrC語言字串函式
- [PHP原始碼閱讀]strpos、strstr和stripos、stristr函式PHP原始碼函式
- PHP 中 strpos、strstr 和 stripos、stristr 函式原始碼解析PHP函式原始碼
- C語言——常用標準輸入輸出函式 scanf(), printf(), gets(), puts(), getchar(), putchar(); 字串拷貝函式 strcpy(), strncpy(), strchr(), strstr()函式用法特點C語言函式字串
- 程式碼隨想錄演算法訓練營,9月5日 | 151.翻轉字串裡的單詞,卡碼網:55.右旋轉字串,28. 實現 strStr(),459.重複的子字串演算法字串
- 程式碼隨想錄演算法訓練營day09|151.翻轉字串裡的單詞,卡碼網:55.右旋轉字串,28.實現 strStr(),459.重複的子字串演算法字串