3090. 每个字符最多出现两次的最长子字符串¶
一、题目描述¶
给你一个字符串s,请找出满足每个字符最多出现两次的最长子字符串,并返回该子字符串的最大长度。
示例 1:
输入: s = "bcbbbcba"
输出: 4
解释:
以下子字符串长度为 4,并且每个字符最多出现两次:"bcbbbcba"。
示例 2:
输入: s = "aaaa"
输出: 2
解释:
以下子字符串长度为 2,并且每个字符最多出现两次:"aaaa"。
提示:
2 <= s.length <= 100
s 仅由小写英文字母组成。
二、解题思路¶
滑动窗口法O(n)
class Solution {
public:
int maximumLengthSubstring(string s) {
int n = s.size();
int cnt[26]{0};
int j = 0;
int res = 0;
for (int i = 0; i < n; ++i) {
int c = s[i] - 'a';
cnt[c]++;
while (cnt[c] > 2) {
cnt[s[j++] - 'a']--;
}
res = max(res, i - j + 1);
}
return res;
}
};