:type tree: List[int] :rtype: int
(self, tree)
| 94 | """ |
| 95 | class Solution(object): |
| 96 | def totalFruit(self, tree): |
| 97 | """ |
| 98 | :type tree: List[int] |
| 99 | :rtype: int |
| 100 | """ |
| 101 | # [{count, repeat_count, capacity, self-value}, ] |
| 102 | tree_seed = [ |
| 103 | {'count': 1, 'repeat_count': 1, 'capacity': set([tree[0]]), 'self_value': tree[0]} |
| 104 | ] |
| 105 | |
| 106 | for i in range(1, len(tree)): |
| 107 | prev = tree_seed[i-1] |
| 108 | |
| 109 | # repeat self_value |
| 110 | if tree[i] == prev.get('self_value'): |
| 111 | tree_seed.append({'count': prev.get('count') + 1, |
| 112 | 'repeat_count': prev.get('repeat_count') + 1, |
| 113 | 'capacity': prev.get('capacity'), |
| 114 | 'self_value': tree[i]}) |
| 115 | continue |
| 116 | |
| 117 | # already into basket but cannot beside each other. |
| 118 | |
| 119 | if tree[i] in prev.get('capacity'): |
| 120 | tree_seed.append({'count': prev.get('count') + 1, |
| 121 | 'repeat_count': 1, |
| 122 | 'capacity': prev.get('capacity'), |
| 123 | 'self_value': tree[i]}) |
| 124 | continue |
| 125 | |
| 126 | # != but can taken into basket. |
| 127 | if len(tree_seed[i-1].get('capacity')) == 1: |
| 128 | new = prev.get('capacity') |
| 129 | new.add(tree[i]) |
| 130 | |
| 131 | tree_seed.append({'count': prev.get('count') + 1, |
| 132 | 'repeat_count': 1, |
| 133 | 'capacity': new, |
| 134 | 'self_value': tree[i]}) |
| 135 | continue |
| 136 | |
| 137 | # Found Third-fruit. |
| 138 | new = set() |
| 139 | new.add(tree[i]) |
| 140 | new.add(tree[i-1]) |
| 141 | tree_seed.append({'count': tree_seed[i-1].get('repeat_count') + 1, |
| 142 | 'repeat_count': 1, |
| 143 | 'capacity': new, |
| 144 | 'self_value': tree[i]}) |
| 145 | return max(tree_seed, key=lambda x: x['count']).get('count') |
| 146 | |
| 147 | # maxes = 0 |
| 148 | # one = None |