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的库函数居多,但是不要因为用库函数很快做出来就沾沾自喜,这不是学习算法的上策。
双指针回顾
最近需要抽个时间重新把这几道题用双指针的方法再做一遍,届时再来更新。
总结:今日效果不佳,但是也明晰了重点,争取明日补回来。加油!