lc159-Longest Substring with At Most Two Distinct Characters

Given a string, find the length of the longest substring T that contains at most 2 distinct characters.

For example, Given s = “eceba”,

T is “ece” which its length is 3.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Solution {
public:
int lengthOfLongestSubstringTwoDistinct(string s) {
int hash[128] = {0};
int l = s.length();
int max_len=0, cur_nchar=0;
for (int i=0, j=0; i<l; i++) {
if (!hash[s[i]-'A']++) cur_nchar++;
if (cur_nchar <= 2) max_len = max(max_len, i-j+1);
while (cur_nchar > 2) {
if(!--hash[s[j++]-'A']) cur_nchar--;
}
}
return max_len;
}
};