UVa 11577

UVa 11577

題目

http://domen111.github.io/UVa-Easy-Viewer/?11577

給一個字串,求字串中的所有英文字母轉成小寫後,出現次數最多的有哪些

想法

用一個陣列 $cnt$ 儲存每個字母出現的次數,將 $cnt$ 中最大的值對應到的字母輸出

Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include<iostream>
using namespace std;
int cnt[26];
int n,px;
string s;
int main(){
cin>>n;
getchar();
while(n--){
int ans=0;
for(int i=0 ; i<26 ; i++){
cnt[i]=0;
}
getline(cin,s);
for(int i=0 ; i<s.size() ; i++){
if((s[i]>='A' && s[i]<='Z') || (s[i]>='a' && s[i]<='z')){
px=tolower(s[i])-'a';
cnt[px]++;
ans=max(ans, cnt[px]);
}
}
for(int i=0 ; i<26 ; i++){
if(cnt[i]==ans){
cout<<(char)('a'+i);
}
}
cout<<'\n';
}
return 0;
}

時間複雜度分析

每筆測資會將整個字串看過一遍,時間複雜度為 $O(len(s))$

輸出的時間複雜度很小,可以直接視為 $O(1)$

每筆測資時間複雜度約為 $O(len(s))$