给你一个字符串 s ,请找出满足每个字符最多出现两次的最长子字符串,并返回该子字符串的最大长度。
示例 1:
输入: s = "bcbbbcba"
输出: 4
解释:
以下子字符串长度为 4,并且每个字符最多出现两次:"bcbb++bcba++"。
示例 2:
输入: s = "aaaa"
输出: 2
解释:
以下子字符串长度为 2,并且每个字符最多出现两次:"++aa++aa"。
提示:
2 <= s.length <= 100s仅由小写英文字母组成。
分析:双指针,一个指针 l 指向位置 0,另一位代表当前遍历 s 的最右位置 i,同时用一个 cnt 数组记录当前位置 i 的字母出现次数,当 si 的出现次数为 3 时,从 l 开始依次减少 sl 的出现次数,直到 si 的出现次数等于 2,再继续遍历完 s。返回出现的最大长度即可。
cpp
class Solution {
public:
int maximumLengthSubstring(string s) {
int ans=1,l=0,cnt[30]={0};
cnt[s[0]-'a']++;
for(int i=1;s[i];++i)
{
int index=s[i]-'a';
cnt[index]++;
while(cnt[index]>2)
cnt[s[l++]-'a']--;
ans=max(i-l+1,ans);
}
return ans;
}
};