public int lengthOfLongestSubstringTwoDistinct(String s) {
        int count1 = 0;
        int count2 = 0;
        char c1 = 0;
        char c2 = 0;
        int start = 0;
        int current = 0;
        int max = 0;
        for (char ch: s.toCharArray()) {
            if (ch == c1 || ch == c2) {
                if (ch == c1) {
                    count1++;
                } else {
                    count2++;
                }
            } else {
                if (count1 != 0 && count2 != 0) {
                    while (start < current) {
                        if (s.charAt(start) == c1) {
                            count1--;
                        } else if (s.charAt(start) == c2) {
                            count2--;
                        }
                        start++;
                        if (count1 == 0 || count2 == 0) {
                            break;
                        }
                    }
                }
                if (count1 == 0) {
                    c1 = ch;
                    count1 = 1;
                } else {
                    c2 = ch;
                    count2 = 1;
                }
            }
            max = Math.max(max, current - start + 1);
            current++;
        }
        return max;
    }
Longest Substring with At Most Two Distinct Characters
https://leetcode.com/problems/longest-substring-with-at-most-two-distinct-characters/
src/com/interview/array/LongestSubstringWithAtMost2Char.java