错误的代码:
class Solution {
public:int totalFruit(vector<int>& fruits) {int start = 0;int end = 0;set<int> myset;int len = 0;for (; end < fruits.size(); end++){myset.insert(fruits[end]);if (myset.size() > 2 && start < end){myset.erase(fruits[start]);start++;myset.insert(fruits[start]);}else {len = max(len, end - start + 1);}}return len;}
};
//最长的连续的只有两种数字的子串。
因为用set会导致数字虽然已经删掉了但是还是在序列当中。
所以需要用一个 unordered_map来记录每个字符出现的次数
int start = 0;int end = 0;unordered_map<int,int> myMap;int len = 0;for (; end < fruits.size(); end++){myMap[fruits[end]]++;while (myMap.size() > 2 && start <= end){myMap[fruits[start]]--;if (myMap[fruits[start]] == 0){myMap.erase(fruits[start]);}start++;}len = max(len, end - start + 1);}return len;