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):
# if i+j >= str_len or 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题目不定期汇总在 , 欢迎大家批评指正,讨论交流。
因篇幅问题不能全部显示,请点此查看更多更全内容