1

题目大意:

给出一个字符串,要求统计出现次数最多的单词,并且输出该单词和次数(不区分大小写,输出小写),单词为数字和英文字母的组合

算法思路:

直接一边输入一边处理就好,使用c保存输入的每一个字符,s保存出现的每一个单词,如果是大写字符就转化为小写字符,然后将c添加到s的末尾,如果是小写字符或者数字将c添加到s的末尾,如果是其他字符并且s不为空,就开始统计该单词出现的次数,同时判断当前单词s的次数是否为最大,如果是就更新max_count和r(保存输出结果),最后如果是回车就退出循环,输出结果即可

注意点:

1、如果输入a,应当输出a 1,对应测试点4,这里的处理就是在最后判断是否是回车,让统计次数逻辑首先进行。

提交结果:

image.png

AC代码:

#include <cstdio>
#include <unordered_map>
#include <string>


using namespace std;

unordered_map<string,int> counts;//每一个word出现的频次

int main(){
    char c;
    string s;// 暂存每一个单词
    int max_count = -1;// 出现的最高频次
    string r;// max_count对应的word
    while (true){
        scanf("%c",&c);
        if(c>='A'&&c<='Z'){
            // 大写字符转化为小写字符
            c = c+32;
            s += c;
        } else if((c>='a'&&c<='z')||(c>='0'&&c<='9')){
            // 小写字母或者数字
            s += c;
        } else {
            // 不是英文字符
            if(!s.empty()){
                ++counts[s];
                if(counts[s]>max_count){
                    max_count = counts[s];
                    r = s;
                }
                s = "";// 清空s
            }
        }
        if(c=='\n') break;
    }
    printf("%s %d",r.c_str(),max_count);
    return 0;
}

乔梓鑫
569 声望17 粉丝

主要分享个人学习经验和心得