码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2015-02-08 23:12:12      阅读:150      评论:0      收藏:0      [点我收藏+]

标签:

找到最多含有两个不同字符的子串的最长长度。例如: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;
}

 

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

标签:

原文地址:http://www.cnblogs.com/Vae98Scilence/p/4280624.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!