题目

小蓝正在学习一门神奇的语言,这门语言中的单词都是由小写英文字母组 成,有些单词很长,远远超过正常英文单词的长度。小蓝学了很长时间也记不住一些单词,他准备不再完全记忆这些单词,而是根据单词中哪个字母出现得最多来分辨单词。

现在,请你帮助小蓝,给了一个单词后,帮助他找到出现最多的字母和这 个字母出现的次数。

输入描述

输入一行包含一个单词,单词只由小写英文字母组成。

对于所有的评测用例,输入的单词长度不超过 1000。

输出描述

输出两行,第一行包含一个英文字母,表示单词中出现得最多的字母是哪 个。如果有多个字母出现的次数相等,输出字典序最小的那个。

第二行包含一个整数,表示出现得最多的那个字母在单词中出现的次数。

输入输出样例

示例 1

输入

lanqiao

输出

a
2

示例 2

输入

longlonglongistoolong

输出

o
6

运行限制

  • 最大运行时间:1s
  • 最大运行内存: 256M

解答

  • 暴力解法
#include <iostream>
using namespace std;
int main()
{
    string word; // 定义输入的单词变量
    cin >> word; // 用输入流为其赋值
    int cnt[26] = {0}; // 初始化计数器
    int index = -1; // 初始化计数器所用的下标
    for (char s: word) {
        index = s - 'a'; // 获取当前字母在计数器中的下标
        cnt[index]++; // 对应的计数自增1
    }

    int max = -1; // 计数器中的最大值
    int max_index = -1; // 计数器中最大值对应的最小下标
    for (int i = 0; i < 26; i++) {
        if (cnt[i] > max) {
            max = cnt[i]; // 最大值迭代
            max_index = i; // 最大值的最小下标迭代,若最大值未更新,下标也不会更新
        }
    }
    char answer = 'a' + max_index; // 得到字母个数最多的字母

    cout << answer << endl; // 输出题目要求的第一行答案
    cout << max << endl; // 输出题目要求的第二行答案
    return 0;
}