我能想到的算法就是一个O(n)的算法,从字符串开头开始
unsigned int nMaxContinuLen = 0;
unsigned int nCurrentContinuLen = 1;
先把第一个字符加入到一个临时结果串里
for(unsigned int i=1;inputstr[i];i++)
{
if (inputstr[i] == inputstr[i-1] + 1) //当前字符和前一个连续。
{
nCurrentContinuLen++;
向一个临时结果串中加入当前字符;
}
else //当前字符和前一个已经不连续了。
{
if (nCurrentContinuLen > nMaxContineLen) 更新最终结果串为当前统计的临时串;
nCurrentContinuLen = 1; //
清空临时串,把当前字符扔临时串里重新开始统计
}
}
return 最终结果串
这个很好理解,你从开头开始,看下一个字符是不是跟当前字符连续,如果连续,你就把当前字符和下一个字符都扔一个缓冲里,这样持续直到遇到不连续的字符,这样一个连续字串就得到了,然后你用一个max值更新每一个得出的字串的大小,遇到比当前max大的字串就更新结果,这事就完了。绝对的O(n),扫描一遍就完事。