当前位置: 首页 > news >正文

map相关题目

KY264 单词识别

题目描述:

输入一个英文句子,把句子中的单词(不区分大小写)按出现次数按从多到少把单词和次数在屏幕上输出来,次数一样的按照单词小写的字典序排序输出,要求能识别英文单词和句号。

输入描述:

输入为一行,由若干个单词和句号组成

输出描述:

输出格式参见样例。

示例1

输入:

A blockhouse is a small castle that has four openings through which to shoot.

复制输出:

a:2
blockhouse:1
castle:1
four:1
has:1
is:1
openings:1
shoot:1
small:1
that:1
through:1
to:1
which:1

代码讲解:首先就是数据的输入,题目会输入一句英语(包含大小写),而我们要将句中的单词提取出来,进行统计次数,对题目分析,如A,a,算一个单词,那么就要对单词进行大小写判断,isupper()是判断大小写的函数,大写返回非零的数值(真),小写返回零(假),如果为真将大写转化为小写,使用tolower()函数进行转换,转换之后再用map[word]++,进行次数统计,最后再进行次数排序,打印输出。

代码:

#include <cctype>
#include <iostream>
#include <map>
#include<vector>
#include<algorithm>
using namespace std;int main() {string s;map<string,int> mp;while(getline(cin,s)){for(int i = 0,j = 0;i<s.size();i++){if(s[i]==' '||s[i]=='.'){string t = s.substr(j,i-j);if(isupper(t[0])){t[0] = tolower(t[0]);}j=i+1;mp[t]++;}}auto cmp = [](const pair<string,int>& a,const pair<string,int>& b){return a.second>b.second;};vector<pair<string,int>> v(mp.begin(),mp.end());sort(v.begin(),v.end(),cmp);for(int i = 0;i<v.size();i++){cout<<v[i].first<<":"<<v[i].second<<endl;}}
}
// 64 位输出请用 printf("%lld")

692. 前K个高频单词

给定一个单词列表 words 和一个整数 k ,返回前 k 个出现次数最多的单词。

返回的答案应该按单词出现频率由高到低排序。如果不同的单词有相同出现频率, 按字典顺序 排序。

示例 1:

输入: words = ["i", "love", "leetcode", "i", "love", "coding"], k = 2
输出: ["i", "love"]
解析: "i" 和 "love" 为出现次数最多的两个单词,均为2次。注意,按字母顺序 "i" 在 "love" 之前。

示例 2:

输入: ["the", "day", "is", "sunny", "the", "the", "the", "sunny", "is", "is"], k = 4
输出: ["the", "is", "sunny", "day"]
解析: "the", "is", "sunny" 和 "day" 是出现次数最多的四个单词,出现次数依次为 4, 3, 2 和 1 次。

注意:

  • 1 <= words.length <= 500
  • 1 <= words[i] <= 10
  • words[i] 由小写英文字母组成。
  • k 的取值范围是 [1, 不同 words[i] 的数量]

这道题,相比于上面的题目就简单了许多,去掉了数据的处理,只需要次数统计与排序。

代码:

class Solution {
public:vector<string> topKFrequent(vector<string>& words, int k) {unordered_map<string,int> cnt;for(auto& word:words){++cnt[word];}vector<string> rec;for(auto& [key,value]:cnt){rec.emplace_back(key);}sort(rec.begin(),rec.end(),[&](const string& a,const string& b)->bool{return cnt[a]==cnt[b]?a<b:cnt[a]>cnt[b];});rec.erase(rec.begin()+k,rec.end());return rec;}
};

http://www.lryc.cn/news/222568.html

相关文章:

  • JAVA 版小程序商城免费搭建 多商家入驻 直播带货 商城系统 B2B2C 商城源码之 B2B2C产品概述
  • moc_ XX.cpp 中的函数没有定义
  • 11.8代码
  • 常用的表单校验规则——邮箱/QQ/身份证号码/微信/电话/数字字母/整数/文本/密码等
  • Mysql数据库 11.SQL语言 储存过程 下 储存过程管理和游标
  • 如何在Visual Studio上创建项目并运行【超级详细】
  • 《C++ Primer》第7章 类(二)
  • git仓库代码克隆
  • AM@向量代数@向量基本概念和向量线性运算
  • 2023-11-08 LeetCode每日一题(最长平衡子字符串)
  • Web3.0的测试题
  • Javascript知识点详解:对象的继承、原型对象、原型链
  • 学之思开源考试系统部署至Centos7
  • 如何利用浏览器的可见性API优化网站性能
  • 还不知道IP地址不够用是怎么被大牛们解决的?(NAT/NAPT, IPv6, DHCP)
  • 使用决策树预测隐形眼镜类型
  • [ACTF2020 新生赛]BackupFile 1
  • 解决vuex刷新数据丢失
  • linux系统下读取当前硬盘的温度
  • python 深度学习 解决遇到的报错问题8
  • Linux pipe()系统调用示例
  • 音频中的采样率和比特率
  • Python常用脚本
  • Redis5 分布式系统之主从模式
  • 【黑马程序员】Maven 进阶
  • 231108 C语言memset当第三个参数为0,即设置个数为零也不报错
  • HMM与LTP词性标注之马尔科夫模型(HMM原理剖析)
  • Python自动化测试selenium指定截图文件名方法
  • Linux 实现文件后半部分的复制
  • 阿里开源中间件一览