# Frequency Counting# String Manipulation

d267 - 11577 - Letter Frequency

🔗 前往 ZeroJudge 原題

題目描述

題目要求對於給定的多組字串,找出每個字串中出現頻率最高的字母(忽略大小寫,若有相同頻率則依字母順序輸出)。

解題思路

程式首先讀取測試案例的數量。對於每個案例,程式讀取一行字串,將所有字母轉換為大寫,然後使用一個大小為 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;
		}
}

Discussion