明天就要參加百度的校招筆試了,今天準備的時候在網上看到了去年百度的一道筆試題,思考了一下,記錄一下結果
題目:寫一個遞歸程序,求字符串中最長的重複字母數量。比如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;
}
注意:筆試和麪試中的程序題尤其要注意程序的魯棒性