找回密码
 立即注册
首页 业界区 安全 3090. 每个字符最多出现两次的最长子字符串 ...

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

彭水晶 2025-6-19 12:30:17
给你一个字符串 s ,请找出满足每个字符最多出现两次的最长子字符串,并返回该子字符串的 最大 长度。
示例 1:
输入: s = "bcbbbcba"
输出: 4
解释:
以下子字符串长度为 4,并且每个字符最多出现两次:"bcbbbcba"。
示例 2:
输入: s = "aaaa"
输出: 2
解释:
以下子字符串长度为 2,并且每个字符最多出现两次:"aaaa"。
提示:
<ul>2  1) {                    dis.put(sc[left], dis.get(sc[left]) - 1);                } else {                    dis.remove(sc[left]);                }                left++;            }            maxLen = Math.max(maxLen, right - left + 1);        }        return maxLen;    }}[/code]优化hash表为数组,减少时间空间复杂度,但逻辑相同
  1. class Solution {
  2.     public int maximumLengthSubstring(String s) {
  3.         int maxLen = 0, left = 0;
  4.         char[] sc = s.toCharArray();
  5.         Map<Character, Integer> dis = new HashMap<>();
  6.         for (int right = 0; right < sc.length; right++) {
  7.             if (dis.containsKey(sc[right])) {
  8.                 dis.put(sc[right], dis.get(sc[right]) + 1);
  9.             } else {
  10.                 dis.put(sc[right], 1);
  11.             }
  12.             while (dis.get(sc[right]) > 2) {
  13.                 if (dis.get(sc[left]) > 1) {
  14.                     dis.put(sc[left], dis.get(sc[left]) - 1);
  15.                 } else {
  16.                     dis.remove(sc[left]);
  17.                 }
  18.                 left++;
  19.             }
  20.             maxLen = Math.max(maxLen, right - left + 1);
  21.         }
  22.         return maxLen;
  23.     }
  24. }
复制代码
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册