代码随想录算法训练营第九天 | 28. 实现 strStr(),459.重复的子字符串,字符串总结,双指针回顾

28. 实现 strStr()

题目:

给你两个字符串 haystack needle ,请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标(下标从 0 开始)。如果 needle 不是 haystack 的一部分,则返回  -1

示例 1

输入:haystack = "sadbutsad", needle = "sad"

输出:0

解释:"sad" 在下标 0 6 处匹配。

第一个匹配项的下标是 0 ,所以返回 0

示例 2

输入:haystack = "leetcode", needle = "leeto"

输出:-1

解释:"leeto" 没有在 "leetcode" 中出现,所以返回 -1

思路:

代码:

1、暴力法

class Solution:
    def strStr(self, haystack: str, needle: str) -> int:
        long = len(haystack)
        short = len(needle)
        
        for i in range(long-short+1):
            if haystack[i:i+short]==needle:
                return i
        return -1
       

2、KMP

本题是用KMP解决的一道经典题目。

重要的点:

1、来源:由3位创造这个算法的人的名字首字母得来,他们是:Knuth,Morris,Pratt

2、最长前缀和后缀

3、next数组

4、思想精髓:在长字符串中查找是否存在短字符串,通过遍历寻找,如果短字符串遍历到最后一个字母不符合要求,利用kmp,不用从头重新遍历,利用最长前缀对应的数字,作为下标,从这个下标对应的字符继续遍历。

459.重复的子字符串

题目:

给定一个非空的字符串 s ,检查是否可以通过由它的一个子串重复多次构成。

示例 1:

输入: s = "abab"

输出: true

解释: 可由子串 "ab" 重复两次构成。

示例 2:

输入: s = "aba"

输出: false

示例 3:

输入: s = "abcabcabcabc"

输出: true

解释: 可由子串 "abc" 重复四次构成。 (或子串 "abcabc" 重复两次构成。)

思路:

没有思路,也还没找到能看得懂的方式,明日再战!

代码:

字符串总结 

1、利用双指针的时候居多

2、最近渐渐发现,和C++/Java相比,python的库函数居多,但是不要因为用库函数很快做出来就沾沾自喜,这不是学习算法的上策。

双指针回顾 

最近需要抽个时间重新把这几道题用双指针的方法再做一遍,届时再来更新。

总结:今日效果不佳,但是也明晰了重点,争取明日补回来。加油!

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值