题目描述:
给你一个仅由小写英文字母组成的字符串 s
。
如果一个字符串仅由单一字符组成,那么它被称为 特殊 字符串。例如,字符串 "abc"
不是特殊字符串,而字符串 "ddd"
、"zz"
和 "f"
是特殊字符串。
返回在 s
中出现 至少三次 的 最长特殊子字符串 的长度,如果不存在出现至少三次的特殊子字符串,则返回 -1
。
子字符串 是字符串中的一个连续 非空 字符序列。
遍历数组,将出现的特殊子字符串放进hash表中并记录出现的次数,遍历hash表如果次数大于等于3那么进行max(ans,次数),最后返回ans
代码如下:
class Solution {
public:
int maximumLength(string s) {
unordered_map<string,int> hash;
for(int i=0;i<s.size();i++){
string t = "";
t += s[i];
hash[t] ++;
int j = i + 1;
while(j<s.size()){
if(s[j]==s[i]){
t += s[j];
hash[t]++;
}else break;
j++;
}
}
int ans = 0;
for(auto i:hash){
if(i.second>=3) ans = max(ans,int(i.first.size()));
}
if(ans) return ans;
else return -1;
}
};