题目
给你一个仅由小写英文字母组成的字符串 s 。
如果一个字符串仅由单一字符组成,那么它被称为 特殊 字符串。例如,字符串 "abc" 不是特殊字符串,而字符串 "ddd"、"zz" 和 "f" 是特殊字符串。
返回在 s 中出现 至少三次 的 最长特殊子字符串 的长度,如果不存在出现至少三次的特殊子字符串,则返回 -1 。
子字符串 是字符串中的一个连续 非空 字符序列。
思路
二话不说就是暴力
使用 hash 表统计每个特殊字符串出现的次数. 如果 count >=3 并且 特殊字符串的长度 > 当前最大长度 则替换.
代码
class Solution {
public int maximumLength(String s) {
int ans = -1;
Map<String, Integer> map = new HashMap<>();
for (int i = 0; i < s.length(); i++) {
int l = 0;
char c = s.charAt(i);
StringBuilder sb = new StringBuilder();
sb.append(c);
map.merge(sb.toString(), 1, Integer::sum);
Integer count = map.get(sb.toString());
//取最大值
if (count >= 3 && sb.length() > ans) {
ans = sb.length();
}
while (i + ++l < s.length()) {
char next = s.charAt(i + l);
if (next == c) {
sb.append(next);
map.merge(sb.toString(), 1, Integer::sum);
count = map.get(sb.toString());
//取最大值
if (count >= 3 && sb.length() > ans) {
ans = sb.length();
}
} else {
break;
}
}
}
return ans;
}
}
题解
分类讨论
灵神题解 :leetcode.cn/problems/fi…