题解 | 优先队列#字符串排序#

字符串排序

https://www.nowcoder.com/practice/5190a1db6f4f4ddb92fd9c365c944584

/**
 * @file HJ26(medi-字符串).cpp
 * @author your name (you@domain.com)
 * @brief 编写一个程序,将输入字符串中的字符按如下规则排序。
 * 规则 1 :英文字母从 A 到 Z 排列,不区分大小写。
 * 如,输入: Type 输出: epTy
 * 规则 2 :同一个英文字母的大小写同时存在时,按照输入顺序排列。
 * 如,输入: BabA 输出: aABb
 * 规则 3 :非英文字母的其它字符保持原来的位置。
 * 如,输入: By?e 输出: Be?y
 * @version 0.1
 * @date 2023-04-14
 * 
 * @copyright Copyright (c) 2023
 * 
 */

#include<iostream>
#include<vector>
#include<queue>
#include<cctype>

using namespace std;

int main(){
    string s;
    getline(std::cin, s);
    int n = s.size();
    vector<char> res(n,'a');
  //使用优先队列
    priority_queue<pair<char, int>, vector<pair<char, int>>, greater<pair<char, int>> > mid; //默认排序方式是先以first排序再以second排序
    for (int i =0; i<n; i++){
        if(isalpha(s[i])){
            char c = tolower(s[i]);
            pair<char, int> p={c,i};
            mid.push(p);
        }
    }

    for (int i =0; i<n; i++){
        if(!isalpha(s[i])){
            cout << s[i];
        }else{
            int id = mid.top().second;
            cout << s[id];
            mid.pop();
        }
    }
    return 0;
    
}

全部评论

相关推荐

头像
11-09 17:30
门头沟学院 Java
TYUT太摆金星:我也是,好几个华为的社招找我了
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务