给出一个字符串,找出只包含2种字符的最长子串。如aabbcbbbadef,结果是bbcbbb。
string longestSubStrWith2Chars(const string &s)
{
int len = s.length();
// 空串返回空串
if(len == 0)
return "";
char ch1, ch2;
int ch1LastPos, ch2LastPos;
ch1 = s[0];
int i = 0;
while(i < len && s[i] == ch1)
++i;
ch1LastPos = i-1;
// 只有一个字符返回空串
if(i == len)
return "";
ch2 = s[i];
while(i < len && s[i] == ch2)
++i;
ch2LastPos = i-1;
int lenMax = i;
int startPosMax = 0;
int startPosCur = 0;
while(i < len)
{
if(s[i] == ch1)
ch1LastPos = i;
else if(s[i] == ch2)
ch2LastPos = i;
else
{
if(ch1LastPos < ch2LastPos)
{
ch1 = s[i];
startPosCur = ch1LastPos+1;
ch1LastPos = i;
}
else
{
ch2 = s[i];
startPosCur = ch2LastPos+1;
ch2LastPos = i;
}
}
if(i-startPosCur+1 > lenMax)
{
lenMax = i-startPosCur+1;
startPosMax = startPosCur;
}
++i;
}
return s.substr(startPosMax, lenMax);
}

本文介绍了一种寻找字符串中仅包含两种字符的最长连续子串的算法实现。通过跟踪两个字符的最后位置来更新最长子串的起始位置及长度,最终返回最长子串。
3090

被折叠的 条评论
为什么被折叠?



