解法一:暴力
遍历长串,匹配到短串停止。此处提供一种比暴力稍好的策略,即不用每次都往前查找匹配,只有最后一个字母和中间字母都匹配再查找,这样能优化很多复杂度,最优复杂度为O(N),最坏仍为O(N(N-M))
class Solution:
def strStr(self, haystack: str, needle: str) -> int:
if needle == '': return 0
def judge(pos):
if haystack[pos:pos+len(needle)] == needle:
return 1
return 0
for idx, c in enumerate(haystack):
if needle[0] == c:
p1, p2 = int(len(needle)/2), (len(needle)-1)
if idx + p2 < len(haystack) and needle[p2] == haystack[idx+p2] and needle[p1] == haystack[idx+p1]:
result = judge(idx)
if result: return idx
return -1
解法二:回溯
从开始处匹配,若不对则回溯。回溯到哪个位置是关键,若继续进行,会忽略之前可能匹配的串,如