C语言例题-关键词提取

该文章展示了一段C++代码,用于处理一组字符串,将它们转换为小写并找出出现频率最高且字典序最小的单词。代码利用了unordered_map存储单词及其出现次数,通过transform函数实现字符转换,并通过迭代比较找到关键词。
摘要由CSDN通过智能技术生成

有一堆单词,里面可能有大写字母或者小写字母。请你先将单词全部转为小写,找出小写单词里面出现最多的一个单词视为关键词,如果这样的单词有多个,那么找出其中字典序最小的一个。 两个字符串,大小关系取决于两个字符串从左到右第一个不同字符的 ASCII 值的大小关系。比如a小于b,ah1x小于ahb,acb小于b。 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 64M,其他语言128M 输入描述: 输入的第一行输入这堆单词的个数,每行一个长度不超过 的字符串,代表一个单词。 一堆单词总共不会超过 个单词。

输出描述: 一行输出一个字符串以及一个正整数,代表提取出的关键词,以及关键词出现的次数。

示例1

输入例子: 10 Nice to meet you I can help you thank you

输出例子:

you 3

例子说明:

you最多出现了3次

示例2

输入例子: 3 b c ad

输出例子: ad 1

例子说明:

都出现了1次,ad的字典序最小

示例3

输入例子: 4 B b c ad

输出例子: b 2

C++语言代码如下:

#include <iostream>
#include <unordered_map>
#include <algorithm>

using namespace std;

int main() {
    int n;
    cin >> n;

    unordered_map<string, int> mp;
    for (int i = 0; i < n; i++) {
        string s;
        cin >> s;
        transform(s.begin(), s.end(), s.begin(), ::tolower); // 转为小写
        mp[s]++;
    }

    string res = "";
    int max_cnt = 0;
    for (auto& p : mp) {
        if (p.second > max_cnt) {
            res = p.first;
            max_cnt = p.second;
        } else if (p.second == max_cnt && p.first < res) {
            res = p.first;
        }
    }

    cout << res << " " << max_cnt << endl;
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

个人练习生xx

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值