找到最多含有两个不同字符的子串的最长长度。例如: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; }
时间: 2024-10-22 14:21:00