提示
中等
3
相关企业
给你一个仅由小写英文字母组成的字符串 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
仅由小写英文字母组成。
用哈希表存储特殊子串出现次数即可
class Solution {
public int maximumLength(String s) {
Map<String,Integer>map = new HashMap<>();
int n = s.length();
for(int i=0;i<n;i++){
for(int j=i+1;j<=n;j++){
String ss = s.substring(i,j);
if(isSpe(ss)){
map.put(ss,map.getOrDefault(ss,0)+1);
}
}
}
int res = -1;
for(String key:map.keySet()){
if(map.get(key)>=3){
res = Math.max(res,key.length());
}
}
return res;
}
public boolean isSpe(String s){
int n = s.length();
for(int i=0;i<n-1;i++){
if(s.charAt(i)!=s.charAt(i+1)){
return false;
}
}
return true;
}
}