彭水晶 发表于 2025-6-19 12:30:17

3090. 每个字符最多出现两次的最长子字符串

给你一个字符串 s ,请找出满足每个字符最多出现两次的最长子字符串,并返回该子字符串的 最大 长度。
示例 1:
输入: s = "bcbbbcba"
输出: 4
解释:
以下子字符串长度为 4,并且每个字符最多出现两次:"bcbbbcba"。
示例 2:
输入: s = "aaaa"
输出: 2
解释:
以下子字符串长度为 2,并且每个字符最多出现两次:"aaaa"。
提示:
<ul>21) {                  dis.put(sc, dis.get(sc) - 1);                } else {                  dis.remove(sc);                }                left++;            }            maxLen = Math.max(maxLen, right - left + 1);      }      return maxLen;    }}优化hash表为数组,减少时间空间复杂度,但逻辑相同
class Solution {
    public int maximumLengthSubstring(String s) {
      int maxLen = 0, left = 0;
      char[] sc = s.toCharArray();
      Map<Character, Integer> dis = new HashMap<>();
      for (int right = 0; right < sc.length; right++) {
            if (dis.containsKey(sc)) {
                dis.put(sc, dis.get(sc) + 1);
            } else {
                dis.put(sc, 1);
            }
            while (dis.get(sc) > 2) {
                if (dis.get(sc) > 1) {
                  dis.put(sc, dis.get(sc) - 1);
                } else {
                  dis.remove(sc);
                }
                left++;
            }
            maxLen = Math.max(maxLen, right - left + 1);
      }
      return maxLen;
    }
}
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: 3090. 每个字符最多出现两次的最长子字符串