题解 | 优先队列#字符串排序#
字符串排序
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; }