## Description

https://leetcode.com/problems/fruit-into-baskets/

You are visiting a farm that has a single row of fruit trees arranged from left to right. The trees are represented by an integer array `fruits`

where `fruits[i]`

is the **type** of fruit the `i`

tree produces.^{th}

You want to collect as much fruit as possible. However, the owner has some strict rules that you must follow:

- You only have
**two**baskets, and each basket can only hold a**single type**of fruit. There is no limit on the amount of fruit each basket can hold. - Starting from any tree of your choice, you must pick
**exactly one fruit**from**every**tree (including the start tree) while moving to the right. The picked fruits must fit in one of your baskets. - Once you reach a tree with fruit that cannot fit in your baskets, you must stop.

Given the integer array `fruits`

, return *the maximum number of fruits you can pick*.

**Example 1:**

Input:fruits = [1,2,1]Output:3Explanation:We can pick from all 3 trees.

**Example 2:**

Input:fruits = [0,1,2,2]Output:3Explanation:We can pick from trees [1,2,2]. If we had started at the first tree, we would only pick from trees [0,1].

**Example 3:**

Input:fruits = [1,2,3,2,2]Output:4Explanation:We can pick from trees [2,3,2,2]. If we had started at the first tree, we would only pick from trees [1,2].

**Example 4:**

Input:fruits = [3,3,3,1,2,1,1,2,3,3,4]Output:5Explanation:We can pick from trees [1,2,1,1,2].

**Constraints:**

`1 <= fruits.length <= 10`

^{5}`0 <= fruits[i] < fruits.length`

## Explanation

Regardless of the description, the problem is the same as LeetCode 159. Longest Substring with At Most Two Distinct Characters

## Python Solution

```
class Solution:
def totalFruit(self, fruits: List[int]) -> int:
max_total = 0
i = 0
j = 0
counter = {}
while j < len(fruits):
fruit = fruits[j]
counter[fruit] = counter.get(fruit, 0) + 1
while len(counter) > 2:
first_fruit = fruits[i]
if counter[first_fruit] > 1:
counter[first_fruit] -= 1
else:
del counter[first_fruit]
i += 1
max_total = max(max_total, j + 1 - i)
j += 1
max_total = max(max_total, len(fruits) - i)
return max_total
```

- Time Complexity: ~N
- Space Complexity: ~N