python写算法题:leetcode: 28. Implement strStr()

来源:互联网 发布:扑家汉化组打备用域名 编辑:程序博客网 时间:2024/06/05 12:40

https://leetcode.com/problems/implement-strstr/#/description

class Solution(object):    def kmpTab(self, needle):        nlen = len(needle)        tab  = [0]*nlen        j    = 0        for i in xrange(1, nlen):            while j>0 and needle[j] != needle[i]:                j = tab[j-1]            if needle[j] == needle[i]:                j = j+1            tab[i] = j        return tab    def strStr(self, haystack, needle):        """        :type haystack: str        :type needle: str        :rtype: int        """        tab = self.kmpTab(needle)        hslen = len(haystack)        ndlen = len(needle)        if hslen==0 and ndlen==0: return 0        i=0        j=0        while i<hslen and j<ndlen:            if haystack[i] != needle[j]:                if j>0:                    j=tab[j-1]                else:                    j=0                    i+=1            else:                i+=1                j+=1        if j>=ndlen:            return i-ndlen        return -1

思路:KMP

原创粉丝点击