標籤:style blog os io ar 2014 log amp size
題目完整描述為:用遞迴的方式實現一個求字串中連續出現相同字元的最大值,如aaabbcc,連續出現a的最大值為3,abbc,連續出現字元最大的值為2。
以下是我想出來的方法:
#include <iostream>using namespace std;#define MAX(a, b) (a) > (b) ? (a) : (b)int Get(char *s, int n, int m) //字元指標, 當前最長串, max最長串{ if(*(s+1) == '\0') return MAX(n, m); if(*s == *(s+1)) return Get(s+1, n+1, m); return Get(s+1, 1, MAX(n, m));}int main(){ printf("%d\n", Get("abbc", 1, 1)); printf("%d\n", Get("aaabbcc", 1, 1)); getchar(); return 0;}
以及另一種遞迴的方法:
#include <iostream>using namespace std;int Get(char *s){ int ans = 0; char *t = s; if(*s == '\0') return ans; while(*s != '\0' && *t == *s) ans++, s++; t++; int tmp = Get(t); return ans > tmp ? ans : tmp;}int main(){ printf("%d\n", Get("abbc")); printf("%d\n", Get("aaabbcc")); getchar(); return 0;}
不知道為什麼一定要是遞迴實現。。。可能是要考察寫遞迴的能力吧,無所謂,反正筆試面試題都很怪異就是了-.-
如果你有其他更好的方法,請賜教!
[2013百度軟體研發筆試題] 求字串中連續出現相同字元的最大值