arrays - 按字母顺序排序上部,然后是其各自的下部,所有内容都应按排序方式
问题描述
输入字符串中不存在重复项。
Ex AbBa 输出 = AaBb
Ex = ACdac 输出 = AaCcd
Ex = ADaEedb 输出 = AabDdEe
请指导我我的代码没有为最后一个测试用例运行任何有不同想法的人请评论 lang 是否是 c++ 比我更容易理解
C++
#include<bits/stdc++.h>
using namespace std;
void swap(char *a,char *b){
char temp = *a;
*a = *b;
*b =temp;
}
int main(){
string copy1;
string s ;
cin>>s;
int j=-1;
int left = 0;
int right = s.length()-1;
while(left<right){
if(s[left] >= 'a' && s[right]<='z'){
swap(&s[left],&s[right]);
right--;
}
else
left++;
}
cout<<s<<endl;
priority_queue <char, vector<char>, greater<char> > pq;
for(int i=0;i<s.length();i++){
if(s[i]>='A' && s[i]<='Z'){
pq.push(s[i]);
}
}
for(int i=0;i<s.length();i++){
if(pq.empty()==false){
char m = pq.top();
if(find(s.begin(),s.end(),(char)(m+32))!=s.end()){
copy1+=(char)m;
copy1+=(char)(m+32);
pq.pop();
}
else{
copy1+=(char)m;
pq.pop();
}
}
}
cout<<copy1<<endl;
}
*/
解决方案
使用尽可能多的标准库的快速实现:
#include <cctype>
#include <algorithm>
#include <string>
#include <iostream>
int main(){
auto compare = [](char a, char b){
char upperA = std::toupper(a);
char upperB = std::toupper(b);
if(upperA != upperB) return upperA < upperB;
if(upperA == a) return true;
return false;
};
std::string input = "ADaEedbaaaaa";
std::sort(input.begin(), input.end(), compare);
auto endOfUniques = std::unique(input.begin(), input.end());
input.erase(endOfUniques, input.end());
std::cout << input << std::endl;
}
如果您绝对必须使用 std::priority_queue 而不是 std::sort,那么这个稍微不那么优雅的版本可以工作,尽管它不执行任何重复数据删除(我不清楚“字符串中不允许重复”是否是输入或输出的要求):
#include <cctype>
#include <string>
#include <iostream>
#include <queue>
int main(){
struct compare{
bool operator()(char a, char b){
char upperA = std::toupper(a);
char upperB = std::toupper(b);
if(upperA != upperB) return upperA > upperB;
if(upperA == a) return false;
return true;
}
};
std::string input = "ADaEedb";
std::priority_queue<char, std::vector<char>, compare> queue;
for(auto c : input) queue.push(c);
std::string output;
while(!queue.empty()){
output += queue.top();
queue.pop();
}
std::cout << output << std::endl;
}
推荐阅读
- apache-kafka - 如何知道某个主题中的所有文档都已被 Kafka 消费者消费了?
- php - 如何使此功能同时接受电话号码和电子邮件?
- sockets - 将 WebSocket 连接到 'ws:
- javascript - Angular 5 NullInjectorError:n 没有提供者
- angular - 如何在角度组件中使用 debounceTime?
- r - 如何分析R中亲和传播聚类的图结果?
- python - 将鼠标悬停在饼图中的楔形上时可以显示标签
- jquery - 按重要性、权重和长度对查询进行排序
- php - Braintree 付款 - 沙盒交易的处理器拒绝(2409)错误
- karate - 如何在空手道中使用 FileUtils?