跳转至

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;
    }
};