/*
* @lc app=leetcode.cn id=904 lang=typescript
*
* [904] 水果成篮(实质为求最大两元素连续子串)
*/
//滑动窗口
// @lc code=start
function totalFruit(fruits: number[]): number {
let left = 0,
right = 0,
sum = 0,
//水果种类1
ln = fruits[left],
//水果种类2
rn = fruits[right];
while (right < fruits.length) {
if (fruits[right] === ln || fruits[right] === rn) {
//保证最大子串数
sum = sum > right - left + 1 ? sum : right - left + 1;
right++;
} else {
//更新左窗口位置
left = right - 1;
//更新水果种类
ln = fruits[left];
//将左窗口放在同类水果最左侧
while (left >= 1 && fruits[left - 1] === ln) {
left--;
}
//更新水果种类
rn = fruits[right];
//保证最大子串数
sum = sum > right - left + 1 ? sum : right - left + 1;
}
}
return sum;
}
// @lc code=end