给你一个仅由小写英文字母组成的字符串 s
。
如果一个字符串仅由单一字符组成,那么它被称为 特殊 字符串。例如,字符串 "abc"
不是特殊字符串,而字符串 "ddd"
、"zz"
和 "f"
是特殊字符串。
返回在 s
中出现 至少三次 的 最长特殊子字符串 的长度,如果不存在出现至少三次的特殊子字符串,则返回 -1
。
子字符串 是字符串中的一个连续 非空 字符序列。
示例 1:
输入:s = "aaaa" 输出:2 解释:出现三次的最长特殊子字符串是 "aa" :子字符串 "aaaa"、"aaaa" 和 "aaaa"。 可以证明最大长度是 2 。
示例 2:
输入:s = "abcdef" 输出:-1 解释:不存在出现至少三次的特殊子字符串。因此返回 -1 。
示例 3:
输入:s = "abcaba" 输出:1 解释:出现三次的最长特殊子字符串是 "a" :子字符串 "abcaba"、"abcaba" 和 "abcaba"。 可以证明最大长度是 1 。
提示:
3 <= s.length <= 50
s
仅由小写英文字母组成。
思路:
数据范围不是很大,所以直接暴力解找出所有的子字符串然后判断它们是否满足题目条件即可:
时间复杂度:O(N^3)
空间复杂度:O(N)
class Solution:
def maximumLength(self, s: str) -> int:
for i in range(len(s), 0, -1): # i is the length of the substring
s2count = defaultdict(int)
for j in range(len(s) - i + 1):
sub_string = s[j:j + i]
if len(sub_string) != i * len(set(sub_string)):
continue
s2count[sub_string] += 1
if s2count[sub_string] == 3:
return len(sub_string)
return -1