牛客:HJ26 字符串排序[华为机考][map]

学习要点

  1. multimap.equal_range

题目链接

字符串排序_牛客题霸_牛客网

题目描述

解法:multimap

cpp 复制代码
#include <bits/stdc++.h>
#include <cctype>
#include <iostream>
#include <unordered_map>
using namespace std;

int main() {
    string line_big_str;
    getline(cin,line_big_str);
    multimap<char,vector<int>> ch_bool_pos_map;
    vector<char> ret_ch(line_big_str.size(),'a');
    for(int i = 0;i<line_big_str.size();i++)
    {
        if(islower(line_big_str[i]))
        {
            // 构造值数组
            vector<int> tv;
            tv.push_back(1); tv.push_back(i);
            // 构造键值对:小写字母
            ch_bool_pos_map.insert({line_big_str[i],tv});
        }
        else if(isupper(line_big_str[i]))
        {
            // 构造值数组
            vector<int> tv;
            tv.push_back(0); tv.push_back(i);
            // 构造键值对:大写字母
            ch_bool_pos_map.insert({tolower(line_big_str[i]),tv});
        }
        else {
            // 确定非字母字符位置
            ret_ch[i] = line_big_str[i];
        }
    }
    // 写入ret_ch
    vector<char> t_ret;
    for(char ch = 'a';ch<='z';ch++)
    {
        auto it1 = ch_bool_pos_map.find(ch);
        if(it1 == ch_bool_pos_map.end())
        {
            continue;
        }
        else
        {
            // 构造单桶map
            auto it2 = ch_bool_pos_map.equal_range(ch);
            map<int,char> zi_map;
            for(auto i = it2.first;i != it2.second;i++)
            {
                zi_map[i->second[1]] = i->second[0] == 1 ? ch : toupper(ch);
            }
            // 填入t_ret
            for(auto& i: zi_map)
            {
                t_ret.push_back(i.second);
            }

        }
    }
    // 写入ret_ch
    for(int i = ret_ch.size() -1;i>=0;i--)
    {
        if(ret_ch[i] != 'a')
            continue;
        ret_ch[i] = t_ret.back();
        t_ret.pop_back();
    }
    // 开始打印
    for(auto& i: ret_ch)
    {
        cout << i;
    }
}













// 64 位输出请用 printf("%lld")
相关推荐
qeen876 分钟前
【Linux】操作系统之进程介绍(二)
linux·笔记·学习·进程
从零开始的嵌入式之旅25 分钟前
day47
arm开发·经验分享·笔记·嵌入式硬件
陈年老古董1 小时前
MediaPipe 姿态检测与脸部关键点检测
笔记·python·opencv·学习·dlib
彧azz1 小时前
操作系统时间管理与系统核心板块学习总结
c语言·笔记·学习·系统架构
zhangrelay2 小时前
《机器人控制器设计与编程》课程习题资料-2026
linux·笔记·学习·ubuntu
志尊宝2 小时前
Vue3 零基础每日笔记(055):组件里正确使用 store——storeToRefs 解构与 $patch 批量修改
笔记·vue·html·前端开发·软件开发
kkkkkkkkkk_Z2 小时前
新手自学嵌入式|学习日记:从C语言到51单片机基础(GPIO、中断、定时器与PWM篇)
linux·笔记·学习·51单片机
陈年老古董3 小时前
微博情感分析项目学习笔记
笔记·python·学习·机器学习·项目
2601_960631233 小时前
如何用公开数据接口查询制药企业资质信息
笔记
小刘在重生~3 小时前
Oracle_day2 单行函数|组函数|分组|伪列|子查询|分页|多表连接
笔记·oracle·面试