【leetcode】|leetcode 28 implement strStr() (实现strStr()) python3 多种思路(熟悉string的内建函数,str的切片操作)

所有Leetcode题目不定期汇总在 Github, 欢迎大家批评指正,讨论交流。
class Solution: def strStr(self, haystack, needle): """ :type haystack: str :type needle: str :rtype: int """# 思路一: 以主串为主干,进行一次遍历。边界条件比较多,不容易一次考虑周全。 #substr_len =len(needle) #str_len = len(haystack)#if substr_len== 0: return 0 #if substr_len <= str_len:# 考虑子串比主串更长的情况 #for i in range(str_len):#主字符串遍历一次 #if haystack[i] == needle[0] and str_len - i >= substr_len: #for j in range(substr_len): #ifi+j >= str_lenor haystack[i+j] != needle[j] :# 小心主串越界 #break #elif haystack[i+j] == needle[j] and j == substr_len - 1: #return i #elif str_len - i < substr_len or i == str_len-1:# 主串过短,无法完成匹配,提前终止。主串匹配到了最后一个字符也无法匹配的特殊情况 "mississippi""a" #return -1 #else: # return -1# 思路二: 是不是有点投机的嫌疑? 直接用字符串的内建函数s.find() # if(len(needle)==0): #return 0 # else: #return haystack.find(needle)# 思路三: for i in range(len(haystack)-len(needle)+1):# 有效减少比较的次数 if haystack[i:i+len(needle)]==needle:# 字符串切片操作可以直接比较一个子串,不用每个字符都比较 return i# i 为 0 的时候, haystack[0:0] 表示为 0 return -1

所有Leetcode题目不定期汇总在 Github, 欢迎大家批评指正,讨论交流。

    推荐阅读