/*
 * [904] 水果成篮
 * 找至多包含两种元素的最长子串,返回其长度
 */

// @lc code=start
/**
 * @param {number[]} fruits
 * @return {number}
 */
var totalFruit = function (fruits) {
  let left = 0;
  let ans = 0;
  const map = new Map()
  for (let right = 0; right < fruits.length; right++) {
    // 放
    map.set(fruits[right], (map.get(fruits[right]) || 0) + 1);
    while (check()) {
      // 取
      const leftKey = fruits[left]
      const leftVal = map.get(leftKey)
      if (leftVal > 1) {
        map.set(leftKey, leftVal - 1)
      } else {
        map.delete(leftKey)
      }
      left++
    }
    ans = Math.max(ans, right - left + 1)
  }
  return ans;

  function check() {
    return map.size > 2
  }
};
console.log(totalFruit([1, 2, 3, 2, 2]))
console.log(totalFruit([3, 3, 3, 1, 2, 1, 1, 2, 3, 3, 4]))