d267 - 11577 - Letter Frequency
題目描述
題目要求對於給定的多組字串,找出每個字串中出現頻率最高的字母(忽略大小寫,若有相同頻率則依字母順序輸出)。
解題思路
程式首先讀取測試案例的數量。對於每個案例,程式讀取一行字串,將所有字母轉換為大寫,然後使用一個大小為 26 的陣列 c 來記錄每個字母的出現次數。接著,程式找出陣列中最大的值 max,並輸出所有出現次數等於 max 的字母。
複雜度分析
- 時間複雜度: O(N*M),其中 N 是測試案例的數量,M 是每個字串的長度。因為需要遍歷每個字串的每個字符,以及遍歷 26 個字母的頻率陣列。
- 空間複雜度: O(1),因為使用的頻率陣列大小固定為 26。
程式碼
#include <iostream>
#include <string>
using namespace std;
int main(){
int a=0,i,max=0;
string b,d;
cin >> a;
getline(cin,b);
for(;a>0;a--){
d.clear();max=0;
int c[26]={0};
getline(cin,b);
for(i=0;i<b.length();i++){
if(b[i]>=65&&b[i]<=90)
d+=b[i];
else if(b[i]>=97&&b[i]<=122)
d+=b[i]-32;
}
for(i=0;i<d.length();i++){
c[d[i]-65]++;
}
for(i=0;i<26;i++){
if(c[i]>max)
max=c[i];
}
for(i=0;i<26;i++){
char k='a';
if(c[i]==max){
k+=i;
cout << k;
}
}
cout << endl;
}
}