• 140-28. 实现 strStr()


    给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回  -1。(两个都是我写的,暴力破解搞得还可以写,但是kmp算法,我只能去网上找的改编成python代码)
    估计没有十年脑血栓我是写不出来kmp算法了(我用手可以推出来next_数组,但是代码部分就是不知道如何实现难受)
    class Solution(object):
        def strStr1(self, haystack, needle):
            """
            :type haystack: str
            :type needle: str
            :rtype: int
            """
            i = 0
            j = 0
            length = len(haystack)
            length2 = len(needle)
            while i < length and j < length2:
                if haystack[i] == needle[j]:
                    i += 1
                    j += 1
                else:
                    i = i - j + 1
                    j = 0
    
            if j == length2:
                return i - length2
            else:
                return -1
    
        def strStr(self, haystack, needle):
            """KMP算法
            :type haystack: str
            :type needle: str
            :rtype: int
            """
            if not needle:
                return 0
    
            if not haystack:
                return -1
    
            next_ = self.kmp(needle)
            i = 0
            j = 0
            while i < len(haystack):
                while j > 0 and haystack[i] != needle[j]:
                    j = next_[j-1]
                if haystack[i] == needle[j]:
                    j += 1
                if j == len(needle):
                    return i - j + 1
                i += 1
            return -1
    
        def kmp(self, dest):
            """kmp算法next_数组创建"""
            next_ = [0] * len(dest)
            i = 1
            j = 0
            while i < len(dest):
                while j > 0 and dest[i] != dest[j]:
                    j = next_[j-1]
    
                if dest[i] == dest[j]:
                    j += 1
                next_[i] = j
                i += 1
            return next_
    
    
    if __name__ == '__main__':
        haystack = "hello"
        needle = "ll"
        s1 = Solution()
        print(s1.kmp(needle))
        print(s1.strStr(haystack, needle))
    
  • 相关阅读:
    ros::NodeHandle成员介绍
    ros::NodeHandle成员介绍
    odom_out_and_back.cpp
    odom_out_and_back.cpp
    c++实现ros by example volume1 例子timed_out_and_back功能
    SQL语句进阶
    数据库基础(常用的SQL)
    安装Mysql
    1.初识数据库
    (MYSQL错误解决)本地计算机上的MYSQL服务启动停止后,某些服务在未由其他服务或程序使用时将自动停止
  • 原文地址:https://www.cnblogs.com/liuzhanghao/p/14275551.html
Copyright © 2020-2023  润新知