天天看點

A1071 Speech Patterns (25分)

思路如下:

  每個 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

點選跳轉代碼位址