3090. 每个字符最多出现两次的最长子字符串
题目内容:
给你一个字符串 s
,请找出满足每个字符最多出现两次的最长子字符串,并返回该
子字符串
的 最大 长度。
示例 1:
输入: s = "bcbbbcba"
输出: 4
解释:
以下子字符串长度为 4,并且每个字符最多出现两次:"bcbbbcba"
。
示例 2:
输入: s = "aaaa"
输出: 2
解释:
以下子字符串长度为 2,并且每个字符最多出现两次:"aaaa"
。
题目解法:
这道题是不定长滑动窗口的解法,有点理解什么叫不定长了,定长滑动窗口,你移动了右边一次,左边就得跟着移动一次,无论如何都要移动;而不定长窗口不是,右边移动,左边只有窗口条件不符合时才会移动一次或者多次;以这道题为例,窗口右边移动进来一个新值,只有窗口相同字母出现两次以上,左边才会动;
/**
* @param {string} s
* @return {number}
*/
var maximumLengthSubstring = function(s) {
if(!s) return 0
let ans=0;
let n=s.length;
let map=new Map()
let left=0
for(let i=0;i<n;i++){
map.set(s[i],map.has(s[i])?map.get(s[i])+1:1)
while(map.get(s[i])>2){
map.set(s[left],map.get(s[left])?map.get(s[left])-1:0)
left++
}
ans=Math.max(ans,i-left+1)
}
return ans
};