力扣-1668. 最大重复子字符串

本文最后更新于:2022年11月6日 晚上

题目描述

1668

思路和实现

看到这种题,熟悉的感觉,哎呦,这不KMP吗?计算每个字符的特征向量用以确定匹配失败时的回溯位置,思路清晰。
问题是我不会写KMP。(早就忘光了.jpg)
那行,那就最简单粗暴的遍历吧。
最喜欢的一集(一种做法).jpg

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class Solution:
def maxRepeating(self, sequence: str, word: str) -> int:
result = repeat_time = i = flag = 0
word_len = len(word)
s_len = len(sequence)
sequence += " " * word_len # 防止下标越界罢了
while i < s_len:
if sequence[i] == word[0]: # 如果当前字母和word首字母相同
while sequence[i: i + word_len] == word:
flag = 1
i = i + word_len
repeat_time += 1 # 重复次数+1
if not flag:
i += 1
else:
i = i - word_len + 1
flag = 0
result = max(result, repeat_time)
repeat_time = 0
continue
i += 1
return result

上面代码中,因为懒所以我直接用切片进行比较,搞得我还得用了一个flag变量辅助回溯,属于是空间(内存)杀手了。
(其实是可以用动态规划+KMP的但是我不会这太高级了呜呜)
(简单题就应该用简单写法才对(x))


这里有一只爱丽丝

希望本文章能够帮到您~


力扣-1668. 最大重复子字符串
https://map1e-g.github.io/2022/11/03/leetcode-1668/
作者
MaP1e-G
发布于
2022年11月3日
许可协议