牛客: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")
相关推荐
羊群智妍7 小时前
2026 AI搜索流量密码:免费GEO监测工具,优化效果看得见
笔记·百度·微信·facebook·新浪微博
山岚的运维笔记9 小时前
SQL Server笔记 -- 第18章:Views
数据库·笔记·sql·microsoft·sqlserver
lpruoyu10 小时前
【Android第一行代码学习笔记】Android架构_四大组件_权限_持久化_通知_异步_服务
android·笔记·学习
wdfk_prog10 小时前
[Linux]学习笔记系列 -- [drivers][mmc][mmc_sdio]
linux·笔记·学习
果果燕11 小时前
今日学习笔记:双向链表、循环链表、栈
笔记·学习·链表
觉醒大王11 小时前
AI写的青基中了
人工智能·笔记·深度学习·学习·职场和发展·学习方法
明月醉窗台11 小时前
qt使用笔记六之 Qt Creator、Qt Widgets、Qt Quick 详细解析
开发语言·笔记·qt
Hello_Embed13 小时前
libmodbus 移植 STM32(USB 串口后端篇)
笔记·stm32·单片机·嵌入式·freertos·libmodbus
张祥64228890413 小时前
RTKLIB源码和理论结合分析笔记三
笔记
日更嵌入式的打工仔14 小时前
0欧电阻作用
笔记