思路如下:
每個 word 視為一個鍵,然後每枚舉一個該鍵字元,該鍵相對應的值就加一。即取 string 到 int 的映射
/* 僞碼 */
for (枚舉每個字元) {
if (目前字元是 alpha cha) {
if (是大寫) 鍵 = 鍵 + 其小寫
else 鍵 = 鍵 + *it
} else continue;//跳過其他字元
if (下一個字元不是 alpha cha) {
if (鍵在 map 中不存在) {
map[鍵] = 1;//初始為 1
} else {
int ori = map[鍵];
ori++;
map[鍵] = ori;//下标通路會覆寫
}
鍵.clear()
}
}
由于 map 裡的 key 是自動按字典序排序的,是以隻要順序周遊,找到第一個最大的就行了
/* 僞碼 */
string max_key; int max_val = -1;
for (周遊 map) {
if (it->second > max_val) {//用 ">" 來找最大,相等的不會再進來,以此保證找到的最大肯定是字典序排列的第一個
max_val = it->second;
max_key = it->first;
}
}
題目比較簡單,刷完後記錄下我遇到的小問題:
1. 輸入一整行用 getline():
getline() 這樣用, getline(cin, string類對象);
2. map.find(鍵) 找到傳回疊代器類型,找不到傳回 map.end()
3. 一般 PA 剩餘不通過的都是特例,比如這題:
特例就是一個字元的字元串。同樣以後見字元串類題目 PA 就想 1) 單個字元; 2) 是否空格、回車為題目特例字元;見數字類題目 PA 就想 1) 0
點選跳轉代碼位址