题解
2026-07-15 20:16:19
发布于:湖南
40阅读
0回复
0点赞
题意
给一个字符串,包含数字、大写字母
去掉所有重复字符,每个字符只留一个
把剩下不重复的字符,按字典序从大到小排列输出
思路
输入字符串。
先用 sort 从小到大排序。
作用:把相同字符挤到一起,方便去重
遍历去重。
遍历排序后的串,和前一个字符不一样就保留,重复的跳过
再用 逆序排序。
把去重后的字符,改成从大到小
完整代码
第一种:
#include <iostream>
#include <string>
#include <algorithm> // sort 要用这个头文件
using namespace std;
int main() {
string s;
cin >> s;
// 第一步:排序(从小到大)
sort(s.begin(), s.end());
// 第二步:去重
string res;
for (int i = 0; i < s.size(); i++) {
// 如果是第一个字符 或者 和前一个不一样,就保留
if (i == 0 || s[i] != s[i-1]) {
res += s[i];
}
}
// 第三步:把结果从大到小排序
sort(res.rbegin(), res.rend());
// 输出
cout << res << endl;
return 0;
}
第二种(使用map):
#include <bits/stdc++.h>
using namespace std;
int main() {
// map自动去重 + 自动按字典序升序排列
map<char, bool> mp;
string s;
cin >> s;
// 遍历字符串,把所有字符存入map(自动去重)
for (char ch : s) {
mp[ch] = true;
}
// 逆序遍历map,得到字典序从大到小的字符
for (auto it = mp.rbegin(); it != mp.rend(); ++it) {
cout << it->first;
}
return 0;
}

这里空空如也








有帮助,赞一个