给你一个字符串 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表为数组,减少时间空间复杂度,但逻辑相同- 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[right])) {
- dis.put(sc[right], dis.get(sc[right]) + 1);
- } else {
- dis.put(sc[right], 1);
- }
- while (dis.get(sc[right]) > 2) {
- if (dis.get(sc[left]) > 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;
- }
- }
复制代码 来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |