思路如下:
每个 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