leetcode[159]Longest Substring with At Most Two Distinct Characters

找到最多含有两个不同字符的子串的最长长度。例如:eoeabc,最长的是eoe为3,其他都为2.

例如:string s="aqaqedadcdccd";

使用一个map<char,int>  fmap记录每个字符出现的个数,详解在程序中注释。

int lengthOfLongestSubstringTwoDistinct(string s) 
{
    int begin=0,size=0,res=0;
    map<char,int> fmap;
    for (int i=0;i<s.size();i++)
    {
        //if 每出现一个在fmap中没有的新字符,将其加入map中,并将记录从begin到i间不同字符个数的size加1
        if(!fmap.count(s[i]))
        {
            fmap[s[i]]=0;
            size++;
        }
        fmap[s[i]]++;
        //当begin到i的字符串中不同字符个数超过2,则选择其中最早结束的那个字符的下一个字符作为新的begin,同时更新不同字符个数size
        while (size>2)
        {
            fmap[s[begin]]--;
            if (fmap[s[begin]]==0)
            {
                fmap.erase(s[begin]);
                size--;
            }
            begin++;
        }
        res=res>(i-begin+1)?res:(i-begin+1);
    }
    return res;
}

 

posted @ 2015-02-08 22:49  Vae永Silence  阅读(122)  评论(0编辑  收藏  举报