Suppose we have a string s, we have to find the length of the longest substring that contains at most 2 distinct characters.
So, if the input is like s = "xyzzy", then the output will be 4, as "yzzy" is the longest substring with at most 2 unique characters.
To solve this, we will follow these steps−
start := 0
c := a map
ans := 0
for end in range 0 to size of s, do
c[s[end]] := c[s[end]] + 1
while size of c > 2, do
c[s[start]] := c[s[start]] - 1
if c[s[start]] is 0, then
start := start + 1
ans := maximum of ans and (end - start + 1)
Let us see the following implementation to get better understanding −
class Solution: def solve(self, s): from collections import Counter start = 0 c = Counter() ans = 0 for end in range(len(s)): c[s[end]] += 1 while len(c) > 2: c[s[start]] -= 1 if not c[s[start]]: del c[s[start]] start += 1 ans = max(ans, end - start + 1) return ans ob = Solution() s = "xyzzy" print(ob.solve(s))
s = "xyzzy"