ZeroJudge D267: Letter Frequency

同題:UVa 11577 – Letter Frequency

我們對一個問題有興趣,到底在這行文字中頻率最高的字母是什麼? 

可以忽略一些非字母的文字,要注意的是若是出現了A大寫字母跟a小寫都算是a

範例測資

範例輸入範例輸出
第一個是代表有幾個測試資料。
一行就是一個測試資料,這一行可能有空白,但是至少有一個字母,一行全部的字母加起來不超過 200 個
對每個測試資料,輸出頻率最高的小寫字母。(如果超過兩個一樣,請字典由小排到大)
1
Computers account for only 5% of the country’s commercial electricity consumption.
co

解題思路

先將每個字母出現的次數存放到一個 Map 中,接下來用 Auto 跑這個 Map 的 For迴圈,並且再開一個新的 Map (Key是int,Value是Vector)

舊的 Map 中的值乘以 -1 當作是新的 Map 的Key,並將字元 Push_Back 到新的 Map 的 Value 中。

之後一樣用 Auto 跑新的 Map 的 For迴圈,先將 Vector 進行排序後將裡面的字母輸出,然後就可以Break這個For迴圈因為只要輸出最多次數的字母而已

範例程式碼-ZeroJudge D267: Letter Frequency

#include <iostream>
#include <map>
#include <vector>
#include <algorithm>
using namespace std;

int main() {
    cin.sync_with_stdio(0);
    cin.tie(0);
    int N;
    cin >> N;
    string a;
    getline(cin, a);
    for (int i = 0; i<N; i++)
    {
        string str;
        getline(cin, str);
        map<char, int>MAP;
        for (int j = 0; j<str.length(); j++)
        {
            if (isalpha(str[j]))
            {
                MAP[tolower(str[j])]++;
            }
        }
        map<int, vector<char>>ans;
        for (auto it:MAP)
        {
            ans[it.second * -1].push_back(it.first);
        }
        for (auto it:ans)
        {
            sort(it.second.begin(), it.second.end());
            for (int j = 0; j<it.second.size(); j++)
            {
                cout << it.second[j];
            }
            cout << "\n";
            break;
        }
    }
}

//ZeroJudge D267
//Dr. SeanXD

發佈留言