赞
踩
这是字符串匹配问题,朴素做法是两重遍历,依次从主串的i位置开始查看是否和模式串匹配,若不匹配就换下一个位置进行判断,直到找到或者遍历完,时间复杂度
O
(
m
×
n
)
O(m \times n)
O(m×n)
还可以对主串进行处理,把所有匹配模式串的字串替换为"1",然后在替换后的主串里面寻找第一个"1"出现的位置
但是这道题时间复杂度最低的还是得考虑用KMP算法,时间复杂度
O
(
m
+
n
)
O(m + n)
O(m+n),这里我是看到Youtube上一位博主的讲解才恍然大悟的,链接在这里
class Solution(object): def strStr(self, haystack, needle): """ :type haystack: str :type needle: str :rtype: int """ if len(needle) == 0: return 0 if len(needle) > len(haystack): return -1 next = self.getNext(needle) j = 0 for i in range(len(haystack)): while j > 0 and haystack[i] != needle[j]: j = next[j-1] if haystack[i] == needle[j]: j += 1 if j == len(needle): return i - j + 1 return -1 def getNext(self, needle): next = [0] * len(needle) j = 0 for i in range(1, len(needle)): while j > 0 and needle[j] != needle[i]: j = next[j-1] if needle[j] == needle[i]: j += 1 next[i] = j return next class Solution(object): def strStr(self, haystack, needle): """ :type haystack: str :type needle: str :rtype: int """ restr = haystack.replace(needle, '1') for i in range(len(restr)): if restr[i] == '1': return i return -1
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。