#include <iostream>
#include <vector>
#include <string>
#include <unordered_map>
#include <algorithm>
typedef std::vector<int> vector;
typedef std::string string;
typedef std::unordered_map<char, int> unordered_map;
typedef unordered_map::iterator map_iter;
int longestSubstring(const string & str, int k) {
if (str.length() == 0 || k < 0) {
return { 0 };
}
int size = str.length();
int start = 0;
int astart = 0;
unordered_map map;
int maxSize = 0;
int count = 0;
char c;
for (int i = 0; i < size; i++) {
c = str[i];
if (map.find(c) != map.end()) {
map[c]++;
}
else {
map.insert({ c, 1 });
}
while (map.size() > k) {
c = str[start];
count = map[c];
if (count > 1) {
map[c]--;
}
else {
map.erase(c);
}
start++;
}
if (map.size() == k)
if (i - start + 1 > maxSize) {
maxSize = i - start + 1;
astart = start;
}
}
std::cout << astart << std::endl;
return maxSize;
}
int main()
{
int ds = longestSubstring("aabacbebebe", 3);
std::cout << ds << std::endl;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8dW5vcmRlcmVkX21hcD4KI2luY2x1ZGUgPGFsZ29yaXRobT4KCnR5cGVkZWYgc3RkOjp2ZWN0b3I8aW50PiB2ZWN0b3I7CnR5cGVkZWYgc3RkOjpzdHJpbmcgc3RyaW5nOwp0eXBlZGVmIHN0ZDo6dW5vcmRlcmVkX21hcDxjaGFyLCBpbnQ+IHVub3JkZXJlZF9tYXA7CnR5cGVkZWYgdW5vcmRlcmVkX21hcDo6aXRlcmF0b3IgbWFwX2l0ZXI7CgppbnQgbG9uZ2VzdFN1YnN0cmluZyhjb25zdCBzdHJpbmcgJiBzdHIsIGludCBrKSB7CgoJaWYgKHN0ci5sZW5ndGgoKSA9PSAwIHx8IGsgPCAwKSB7CgkJcmV0dXJuIHsgMCB9OwoJfQoKCWludCBzaXplID0gc3RyLmxlbmd0aCgpOwoJaW50IHN0YXJ0ID0gMDsKCWludCBhc3RhcnQgPSAwOwoJdW5vcmRlcmVkX21hcCBtYXA7CglpbnQgbWF4U2l6ZSA9IDA7CglpbnQgY291bnQgPSAwOwoJY2hhciBjOwoKCWZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CgkJYyA9IHN0cltpXTsKCgkJaWYgKG1hcC5maW5kKGMpICE9IG1hcC5lbmQoKSkgewoJCQltYXBbY10rKzsKCQl9CgkJZWxzZSB7CgkJCW1hcC5pbnNlcnQoeyBjLCAxIH0pOwoJCX0KCgkJd2hpbGUgKG1hcC5zaXplKCkgPiBrKSB7CgkJCWMgPSBzdHJbc3RhcnRdOwoJCQljb3VudCA9IG1hcFtjXTsKCQkJaWYgKGNvdW50ID4gMSkgewoJCQkJbWFwW2NdLS07CgkJCX0KCQkJZWxzZSB7CgkJCQltYXAuZXJhc2UoYyk7CgkJCX0KCQkJc3RhcnQrKzsKCQl9CgoJCWlmIChtYXAuc2l6ZSgpID09IGspIAoJCQlpZiAoaSAtIHN0YXJ0ICsgMSA+IG1heFNpemUpIHsKCQkJCW1heFNpemUgPSBpIC0gc3RhcnQgKyAxOwoJCQkJYXN0YXJ0ID0gc3RhcnQ7CgkJCX0KCX0KCglzdGQ6OmNvdXQgPDwgYXN0YXJ0IDw8IHN0ZDo6ZW5kbDsKCXJldHVybiBtYXhTaXplOwp9CgppbnQgbWFpbigpCnsKCWludCBkcyA9IGxvbmdlc3RTdWJzdHJpbmcoImFhYmFjYmViZWJlIiwgMyk7CglzdGQ6OmNvdXQgPDwgZHMgPDwgc3RkOjplbmRsOwoKfQo=