百度2010年笔试题解答之“求一个字符串里最长连续字串”

我能想到的算法就是一个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),扫描一遍就完事。



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值