小黑代码:暴力穷举法
class Solution:
def strStr(self, haystack: str, needle: str) -> int:
# 字符串长度
len_h = len(haystack)
len_n = len(needle)
if len_h < len_n:
return -1
# 开始滑动窗口
for i in range(len_h):
for j in range(len_n):
if i+j >= len_h:
return -1
if haystack[i+j] != needle[j]:
break
if j == len_n-1:
return i
return -1
小黑代码:尝试一下KMP算法烧脑锻炼一下思维
class Solution:
def strStr(self, haystack: str, needle: str) -> int:
# 模式串的最长前缀数组
def get_next(pattern):
# 字符串长度
n = len(pattern)
# 初始化next数组,第0个字符的最大前缀为0
next_ = [0]
# 前缀变量
prefix = 0
# 构造next_数组
i = 1
while i < n:
# 末尾字符匹配,前缀长度+1
if pattern[i] == pattern[prefix]:
prefix += 1
next_.append(prefix)
# 不匹配的情况
else:
# 前缀为0
if not prefix:
next_.append(0)
else:
prefix = next_[prefix-1]
continue
i += 1
return next_
# KMP算法
def KMP(string, pattern):
# 获取模式串前缀数组
next_ = get_next(pattern)
# 字符串长度
n_s = len(string)
n_p = len(next_)
if not n_p:
return 0
# 进行KMP匹配
i = 0
j = 0
while i < n_s:
# 末端字符是否相等
if string[i] == pattern[j]:
j += 1
# 不相等的话,找前一个字符的前缀处,继续进行末端匹配
elif j:
j = next_[j-1]
continue
i += 1
# 匹配成功
if j == n_p:
return i-n_p
return -1
return KMP(haystack, needle)
小黑生活(回忆版,相册误删了,只能通过聊天记录和朋友圈回忆部分内容)
苏州环阳山半程马拉松完赛,发着低烧,坚持了下来,并跑出了自己个人最好成绩,刚到终点就下雨了,舞花儿侠被淋了
舞花侠请我吃苏州有名的松鼠鱼
附近逛一逛,准备前往苏州北站高铁
高铁上饿得不行了,吃了碗饭,贵死了,48
麦当劳早餐,下雪了
苏州证书下来了,130直通差了20多秒,要是身体不难受一定可以
午餐干饭
午后咖啡
下班了地铁口麻辣烫
午餐干饭
午后咖啡
感冒了,身体好难受
回家煎牛排
午后咖啡
下班后麻辣烫
漆个连花清瘟
午餐干饭,羊肉泡馍
午后咖啡
下雪了,好治愈啊
回家涮火锅吃