如果給出一個字符串,比如「aaabbccc」,你會如何輸出'a',因爲它和'c'一樣頻繁出現,但是首先出現。在log(n)時間查找頻繁發生的字母?
我使用O(n)時間做了它,但我無法弄清楚如何使用log(n)時間來做到這一點,無論是在Java或c + +。編輯: 這是一個面試問題。
#include <iostream>
#include <string>
using std::string;
using std::cout;
using std::cin;
using std::endl;
char findFreqChar(string str) {
int count;
int maxOccur = 0;
char maxChar;
for (char i = 'A'; i < 'z'; i++) {
count = 0;
for (int j = 0; j < str.length(); j++) {
if (i == str[j])
count++;
}
if (count > maxOccur) {
maxOccur = count;
maxChar = i;
}
}
return maxChar;
}
int main() {
std::cout << "Enter String: ";
std::string str;
std::getline(std::cin, str);
cout << findFreqChar(str);
cin.get();
}
拆分它?並繼續分裂它? – 3kings 2015-04-02 16:34:15
此問題更適合http://cs.stackexchange.com/。 – jean 2015-04-02 16:35:04
我很確定,這不是如何制定面試問題。 – 2015-04-02 17:31:49