百度2013校园招聘笔试题解析

明天就要参加百度的校招笔试了,今天准备的时候在网上看到了去年百度的一道笔试题,思考了一下,记录一下结果


题目:写一个递归程序,求字符串中最长的重复字母数量。比如abbbccd返回3,abbc返回2。


分析:这个题目如果说使用非递归算法会比递归算法要好想一些。其实一个问题如果需要使用递归解决,最主要的一个问题就是如何将问题分解成递归式的。

拿这个题目来说,需要确定的就是每一步递归需要处理什么,一般最先想到的是每一次递归处理一个字符,但这样不能解决这个问题。正确的方法其实是每一步解决一个重复字母串,就像题目中给的例子 abbbccd,每次递归需要处理的字符分别为:a、bbb、cc、d,每次递归的结果为已经处理的字符串中的最长的重复字母数量。


语言表达能力有限,还是直接贴代码吧

#include <stdio.h>

int maxCount(char *pc) {
    int count = 1;
    char c = *pc;
    if (c == '\0') {
        return 0;
    }
    char next = *(pc++);

    while (next != '\0' && c == next) {
        count ++;
        next = *(pc++);
    }

    if (next == '\0') {
        return count;
    } else {
        int n = maxCount(pc);
        return n > count ? n : count;
    }
}

int main() {
    int res = maxCount("1223334444");
    printf("%d\n", res);
    return 0;
}

注意:笔试和面试中的程序题尤其要注意程序的鲁棒性

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值