题解
2026-05-04 16:12:17
发布于:湖南
9阅读
0回复
0点赞
题意
1.给一个字符串,包含数字、大写字母
2.去掉所有重复字符,每个字符只留一个
3.把剩下不重复的字符,按字典序从大到小排列输出
思路
1.输入字符串
2.先用 sort 从小到大排序
作用:把相同字符挤到一起,方便去重
3.遍历去重
遍历排序后的串,和前一个字符不一样就保留,重复的跳过
4.再用 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;
}

这里空空如也








有帮助,赞一个