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

 

点击跳转代码地址

 
posted @ 2021-01-31 20:11  幼麟  阅读(66)  评论(0编辑  收藏  举报