百度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;
}

注意:筆試和麪試中的程序題尤其要注意程序的魯棒性

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章