- 首页 > it技术 > >
【leetcode】|leetcode 28 implement strStr() (实现strStr()) python3 多种思路(熟悉string的内建函数,str的切片操作)
【LeetCode】编程心得&刷题总结
所有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, 欢迎大家批评指正,讨论交流。
推荐阅读