错误的代码:
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;