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):
#                         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题目不定期汇总在 Github, 欢迎大家批评指正,讨论交流。

你可能感兴趣的:(【leetcode】,刷题总结,&,编程心得)