给你一个字符串
sequence
,如果字符串word
连续重复k
次形成的字符串是sequence
的一个子字符串,那么单词word
的 重复值为k
。单词word
的 最大重复值 是单词word
在sequence
中最大的重复值。如果word
不是sequence
的子串,那么重复值k
为0
。给你一个字符串
sequence
和word
,请你返回 最大重复值k
。示例 1:
输入:sequence = "ababc", word = "ab"
输出:2
解释:"abab" 是 "ababc" 的子字符串。
示例 2:
输入:sequence = "ababc", word = "ba"
输出:1
解释:"ba" 是 "ababc" 的子字符串,但 "baba" 不是 "ababc" 的子字符串。
示例 3:
输入:sequence = "ababc", word = "ac"
输出:0
解释:"ac" 不是 "ababc" 的子字符串。
提示:
1 <= sequence.length <= 100
1 <= word.length <= 100
sequence
和word
都只包含小写英文字母。
思路:参考 LeetCode题解
注意到字符串长度不超过 100,我们直接从大到小枚举 word 的重复次数 k,判断 word 重复该次数后是否是 sequence 的子串,是则直接返回当前的重复次数 k。
注意:由于每个字符不能分别复用在前后两个子串中,用过的字符不能出现在后续子串中。因此可以直接用 “len(sequence
) / len(word)” 找到最大重复值k。
比如:sequence=
"aaabaaaba",word="aaaba",那么最中间的a不可以重复使用,既作为前半部分子串aaaba的一个字符,又作为后半部分子串aaaba的一个字符。
时间复杂度:O(n^2),其中 n 为 sequence
的长度,Contains 函数也存在O(n)的时间复杂度
空间复杂度:O(1)
funcmaxRepeating(sequencestring, wordstring) int { fork :=len(sequence)/len(word); k>0; k-- { ifstrings.Contains(sequence, strings.Repeat(word, k)) { returnk } } return0}