Given a binary array, find the maximum length of a contiguous subarray with equal number of 0 and 1.

**Example 1:**

```
Input: [0,1]
Output: 2
Explanation: [0, 1] is the longest contiguous subarray with equal number of 0 and 1.
```

**Example 2:**

```
Input: [0,1,0]
Output: 2
Explanation: [0, 1] (or [1, 0]) is a longest contiguous subarray with equal number of 0 and 1.
```

**Note:** The length of the given binary array will not exceed 50,000.

## Solution

Count appearance of one and zero

Save different of appearance in a hashtable for further comparision

```
class Solution {
func findMaxLength(_ nums: [Int]) -> Int {
var zeroAppearance = 0
var oneAppearance = 0
var firstIndex = [0: -1]
var longest = 0
for i in 0..<nums.count {
if nums[i] == 0 {
zeroAppearance += 1
}else{
oneAppearance += 1
}
let diff = zeroAppearance - oneAppearance
guard let found = firstIndex[diff] else {
firstIndex[diff] = i
continue
}
longest = max(i - found, longest)
}
return longest
}
}
```