C++刷题篇——08字符串重新排列

一、题目

二、解题思路

1、先对每个单词内部进行排序,再对单词间进行排序

2、使用map,key为单词,value为出现的次数

3、由于要对map排序,构造pair型的一维数组,将map的key、value放进去

4、构造函数,按照次数降序、长度升序、字典升序进行排序

三、代码 

#include<iostream>
#include<vector>
#include<string>
#include<map>
#include<algorithm>using namespace std;vector<string>split(string params) {vector<string>p;while (params.find(" ") != string::npos) {int found = params.find(" ");p.push_back(params.substr(0, found));params = params.substr(found + 1);}p.push_back(params);return p;
}bool comp(pair<string, int>a, pair<string, int>b) {//次数降序、长度升序、字典升序if (a.second > b.second) {return a.second > b.second; //出现次数降序}else if (a.second == b.second) {if (a.first.size() > b.first.size()) {return a.first.size() < b.first.size(); //次数相同,则长度升序}else if (a.first.size() == b.first.size()) {return a.first < b.first; //次数、长度相同,则字典升序}else {return a.first.size() < b.first.size(); //长度升序}}else {return a.second > b.second; //出现次数降序}
}int main() {string input_str;getline(cin, input_str);vector<string>v = split(input_str);//第一步:单词内部调整for (int i = 0; i < v.size(); i++) {sort(v[i].begin(), v[i].end()); //对数组每一个元素即单词进行排序}//第二步:单词间调整//先统计每个单词出现的次数map<string, int>str_count_map; //key为单词,value为出现的次数for (int i = 0; i < v.size(); i++) { //遍历数组每一个单词if (str_count_map.count(v[i])) {str_count_map[v[i]]++;}else {str_count_map[v[i]] = 1;}}//排序vector<pair<string, int>>str_count_vec; //注意使用了pairfor (auto x : str_count_map) { //遍历map的元素str_count_vec.push_back(make_pair(x.first, x.second)); //将map的key、value放进数组}sort(str_count_vec.begin(), str_count_vec.end(), comp); //结合自定义的comp对数组,根据出现的次数、长度、字典进行排序for (int i = 0; i < str_count_vec.size(); i++) { //由于map导出的数组的key是不重复的,所以不能直接输出,而要在第二次for循环利用map的value输出重复出现的keyfor (int j = 0; j < str_count_map[str_count_vec[i].first]; j++) {cout << str_count_vec[i].first << " ";}}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/292877.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

算法学习——LeetCode力扣动态规划篇5(198. 打家劫舍、213. 打家劫舍 II、337. 打家劫舍 III )

算法学习——LeetCode力扣动态规划篇5 198. 打家劫舍 198. 打家劫舍 - 力扣&#xff08;LeetCode&#xff09; 描述 你是一个专业的小偷&#xff0c;计划偷窃沿街的房屋。每间房内都藏有一定的现金&#xff0c;影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统…

如何在jupyter使用新建的虚拟环境以及改变jupyter启动文件路径。

对于刚刚使用jupyter的新手来说&#xff0c;经常不知道如何在其中使用新建的虚拟环境内核&#xff0c;同时&#xff0c;对于默认安装的jupyter&#xff0c;使用jupyter notebook命令启动 jupyter 以后往往默认是C盘的启动路径&#xff0c;如下图所示&#xff0c;这篇教程将告诉…

如何使用 ChatGPT 进行编码和编程

文章目录 一、初学者1.1 生成代码片段1.2 解释功能 二、自信的初学者2.1 修复错误2.2 完成部分代码 三、中级水平3.1 研究库3.2 改进旧代码 四、进阶水平4.1 比较示例代码4.2 编程语言之间的翻译 五、专业人士5.1 模拟 Linux 终端 总结 大多数程序员都知道&#xff0c;ChatGPT …

server端

一、创建项目 expess server 1.1 安装nodemon npm i nodemon 1.2 设置连接数据库mongodb 安装mongoose npm i mongoose 在根目录新建config文件夹/db.config.js // 引入mongodb数据库操作模块 const mongoose require("mongoose") // 连接数据库mongoose.con…

【力扣刷题日记】1173.即时食物配送I

前言 练习sql语句&#xff0c;所有题目来自于力扣&#xff08;https://leetcode.cn/problemset/database/&#xff09;的免费数据库练习题。 今日题目&#xff1a; 1173.即时食物配送I 表&#xff1a;Delivery 列名类型delivery_idintcustomer_idintorder_datedatecustomer…

软件杯 深度学习YOLOv5车辆颜色识别检测 - python opencv

文章目录 1 前言2 实现效果3 CNN卷积神经网络4 Yolov56 数据集处理及模型训练5 最后 1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; **基于深度学习YOLOv5车辆颜色识别检测 ** 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0…

cesium加载.tif格式文件

最近项目中有需要直接加载三方给的后缀名tif格式的文件 <script src"https://cdn.jsdelivr.net/npm/geotiff"></script> 或者 yarn add geotiff npm install geotiff 新建tifs.js import GeoTIFF, { fromBlob, fromUrl, fromArrayBuffer } from geotif…

LabVIEW车载轴承振动监测系统

LabVIEW车载轴承振动监测系统 随着汽车工业的快速发展&#xff0c;车用轴承的稳定性和可靠性对保障车辆安全运行越来越重要。目前&#xff0c;大多数车用轴承工作在恶劣的环境下&#xff0c;容易出现各种故障。开发了一种基于LabVIEW的车载轴承振动监测系统&#xff0c;提高车…

【Linux】详解文件系统以及周边知识

一、磁盘的基本知识 磁盘中可以被划分成一个一个的环&#xff0c;每个环都是一个磁道。每个磁道又可以被均分成一个一个的扇区&#xff0c;扇区是磁盘IO的基本单位&#xff08;想要修改扇区中的一个比特位就必须把该扇区的全部比特位都加载到内存中&#xff09;。磁盘中的盘面&…

Linux进程间通信

文章目录 进程通信管道无名管道有名管道 信号通信kill、raise、alarmsignal 处理信号采用信号方式的进程间通信 共享内存shmget 创建ftok 创建key值shmat 映射地址shmdt/shmctl 删除采用共享内存方式的进程间通信 消息队列msgget 创建msgctl 删除msgsnd 发送消息msgrcv 接收消息…

C语言之动态内存管理

在C语言中我们在栈上开辟的空间是固定的&#xff0c;一旦确定好大小就不能随意改变&#xff0c;就想你创建了 int i 10; int arr[10] {0}; int i 一旦确定下来就是四个字节&#xff0c;arr一旦确定好大小在重新运行时也是不能改变的。 为此C语言引入了动态内存空间开辟&#…

java算法day39 | 动态规划part02 ● 62.不同路径 ● 63. 不同路径 II

62.不同路径 思路&#xff1a; 本题非常巧妙。 第一步&#xff1a;定义一个dp数组存储到达每个位置的路径数。 第二步&#xff1a;每个位置的路径数它左面位置的路径数上面位置的路径数。 第三步&#xff1a;不好想的是如何初始化数组。 既然只能向下或向右走&#xff0c;可推出…

全局UI方法-弹窗三-文本滑动选择器弹窗(TextPickDialog)

1、描述 根据指定的选择范围创建文本选择器&#xff0c;展示在弹窗上。 2、接口 TextPickDialog(options?: TextPickDialogOptions) 3、TextPickDialogOptions 参数名称 参数类型 必填 参数描述 rang string[] | Resource 是 设置文本选择器的选择范围。 selected nu…

C易错注意之分支循环,悬空else,短路表达式,static

接下来的日子会顺顺利利&#xff0c;万事胜意&#xff0c;生活明朗-----------林辞忧 前言&#xff1a; c语言中一些关于分支循环中continue常混淆&#xff0c;悬空esle问题&#xff0c;短路表达式&#xff0c;static ,extern在使用时稍不注意就会出错的点,接下来我们将介绍…

javaWeb项目-学生考勤管理系统功能介绍

项目关键技术 开发工具&#xff1a;IDEA 、Eclipse 编程语言: Java 数据库: MySQL5.7 框架&#xff1a;ssm、Springboot 前端&#xff1a;Vue、ElementUI 关键技术&#xff1a;springboot、SSM、vue、MYSQL、MAVEN 数据库工具&#xff1a;Navicat、SQLyog 1、JAVA技术 JavaSc…

Bat中cd到中文路径报错以及windows上设置快捷方式延迟启动执行

场景 要实现在windows启动目录下&#xff0c;执行bat脚本文件。 脚本文件中需要进入某个中文目录 所以直接 cd /d D:\test\中文路径 start test.bat 此时会提示&#xff1a; 此时需要指定bat的编码方式&#xff0c;修改bat脚本文件&#xff0c;添加如下 chcp 65001 cd /d…

AI预测福彩3D第22弹【2024年3月31日预测--第5套算法开始计算第4次测试】

今天&#xff0c;咱们继续进行本套算法的测试&#xff0c;今天为第四次测试&#xff0c;仍旧是采用冷温热趋势结合AI模型进行预测。好了&#xff0c;废话不多说了。直接上结果~ 仍旧是分为两个方案&#xff0c;1大1小。 经过人工神经网络计算并进行权重赋值打分后&#xff0c;3…

通过WSL在阿里云上部署Vue项目

参考&#xff1a; 阿里云上搭建网站-CSDN博客 云服务器重装 关闭当前运行实例 更换操作系统&#xff0c;还有其他的进入方式。 选择ubuntu系统&#xff08;和WSL使用相同的系统&#xff09;。 设置用户和密码。发送短信验证码。 新系统更新。秒速干净的新系统设置完成。 这…

国内ip切换app,让切换ip变得简单

在数字化快速发展的今天&#xff0c;互联网已经成为我们生活中不可或缺的一部分。然而&#xff0c;随着网络应用的深入&#xff0c;用户对于网络环境的需求也日益多样化。其中&#xff0c;IP地址作为网络中的关键标识&#xff0c;其切换与管理显得尤为重要。为了满足用户对于IP…

MongoDB副本集环境搭建(以单机Windows为例)

前言 近期有搭建MongoDB副本集的需求,简单记录一下搭建过程(以本地Windows环境为例)。 一、副本集选型 1 Primary节点、1 Secondary 节点、1 Arbiter节点模式副本集环境搭建。 二、搭建过程 1. 安装MongoDB服务 下载地址:https://www.mongodb.com,如下图所示: 选择…