牛客: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")
相关推荐
蒸蒸yyyyzwd3 小时前
cpp选手备战后端学习笔记day6 秋招笔试题
笔记·学习
DeviceHub5 小时前
硬件工程师选型笔记:ALPS SKPMAPE010 与 Tonevee TS-3025 贴片轻触开关 PIN TO PIN 评估指南
笔记
疯狂打码的少年6 小时前
【数据结构】二叉树的性质(五大性质+计算)
数据结构·笔记·算法
Capricorn19887 小时前
知芽研究问题看板无法推进?从孵化区到笔记的机制排查指南
大数据·论文阅读·人工智能·笔记·学习方法·论文笔记
闪闪发亮的小星星7 小时前
相机脱靶量VS精跟踪精度
笔记
皖山文武7 小时前
逻辑代数基础学习笔记--概述
笔记·学习·机器学习
demodeom11 小时前
Win11 + RTX 5080 本地 Coding 模型测试笔记(已弃坑)
笔记
青山是哪个青山12 小时前
LangChain 学习笔记(五):Tools 工具调用
笔记·学习·langchain
peijiping12 小时前
Agent 工具执行:并行(parallel_tool_calls)和后台(run_in_background)到底有什么区别? (学习笔记)
笔记·学习·ai agent·claude code
Oll Correct12 小时前
Adobe illustrator 案例四:吃豆人 (Pac-Man)图标绘制
笔记·ui·adobe·illustrator