2982. 找出出现至少三次的最长特殊子字符串 II
思路:和这道题LeetCode 2981. 找出出现至少三次的最长特殊子字符串 I(哈希表、数学)的思路一样。
先用数组v记录每个字符的连续次数,然后对每个字符的数组a进行降序排序。一共有三种情况:
1、a[0]-2
2、min(a[0]-1,a[1])
3、a[2]
为了方便比较,我们再每一个数组a都插入两个0
class Solution {
public:
int maximumLength(string s) {
int n=s.size();
vector<int> v[30];
int cnt=0;
for(int i=0;i<n;i++){
cnt++;
if(i==n-1||s[i]!=s[i+1]){
v[s[i]-'a'].push_back(cnt);
cnt=0;
}
}
int mx=0;
for(auto a:v){
if(a.size()<1) continue;
a.push_back(0);
a.push_back(0);
sort(a.begin(),a.end(),greater<int>());
int t=max(a[0]-2,min(a[0]-1,a[1]));
t=max(t,a[2]);
mx=max(mx,t);
}
return mx? mx:-1;
}
};