c657mis - Error
題目描述
題目要求找出輸入字串中,出現次數最多的字元,並輸出該字元及其出現次數。如果有多個字元出現次數相同且都是最大值,則輸出第一個出現的最大次數字元。
解題思路
程式碼首先統計字串中每個字元出現的次數,使用一個大小為 26 的整數陣列 b 來儲存每個小寫字母的出現次數。然後,程式碼找到出現次數最多的字元次數 max。接著,程式碼建立另一個陣列 c,將出現次數等於 max 的字元對應的陣列元素值設為 max + 1。最後,程式碼遍歷輸入字串,對於每個字元,將 c 陣列中對應的元素值減 1。當 c 陣列中某個元素的值減為 1 時,表示該字元是第一個出現次數為 max 的字元,程式碼輸出該字元和 max。
複雜度分析
- 時間複雜度: O(n),其中 n 是輸入字串的長度。程式碼需要遍歷字串兩次,一次用於統計字元出現次數,另一次用於找到第一個出現次數最多的字元。
- 空間複雜度: O(1)。程式碼使用兩個大小為 26 的整數陣列,空間複雜度是常數級別。
程式碼
#include <iostream>
#include <string>
using namespace std;
int main(){
int max,maxn,i;
string a;
while(cin >> a){
int b[26]={};
int c[26]={};
for(i=0;i<a.length();i++)
b[a[i]-97]++;
for(i=0,max=0,maxn=0;i<26;i++){
if(b[i]>max)
max=b[i];
}
for(i=0;i<26;i++){
if(b[i]==max)
c[i]=b[i]+1;
}
for(i=0;i<a.length();i++){
c[a[i]-97]--;
if(c[a[i]-97]==1){
cout << a[i] << " " << max << endl;;
break;
}
}
}
}