题目:
给你一个字符串 sequence
,如果字符串 word
连续重复 k
次形成的字符串是 sequence
的一个子字符串,那么单词 word
的 重复值为 k
。单词 word
的 最大重复值 是单词 word
在 sequence
中最大的重复值。如果 word
不是 sequence
的子串,那么重复值 k
为 0
。
给你一个字符串 sequence
和 word
,请你返回 最大重复值 k
。
代码:
class Solution:
def maxRepeating(self, sequence: str, word: str) -> int:
n, m = len(sequence), len(word)
if n < m:
return 0
f = [0] * n
for i in range(m - 1, n):
valid = True
for j in range(m):
if sequence[i - m + j + 1] != word[j]:
valid = False
break
if valid:
f[i] = (0 if i == m - 1 else f[i - m]) + 1
return max(f)
示例:
示例运行结果:
解题思路:本题用了简单枚举 + 动态规划的方法,首先这里的最大重复子字符串必然是由连续出现的word组成的,那么就可以先将word不断重复扩展到sequence的长度,那么对于这两个字符串的某个公共子串而言,只要这个公共子串的结尾恰好对应了word的结尾,那么说明这个公共子串的后缀就是由word复制若干遍得到的,于是可以根据这个公共子串的长度以及word的长度求出重复的次数。那么在这里只需要找出一个长度最长,且结尾对应了word的结尾的公共子串即可
总结:本节题目虽然为容易,但写起来还是有些许困难,对动态规划也不是很熟练,代码能力还有待加强