C++题目描述从电脑输入一个字符串字符串由合法的英文字符组成你的任务是将这个字符串按照每个字符先出现的顺序进行去重具体规则参考样例。输入描述输入有一行包含一个由合法的英文字符组成的字符串。输出描述输出一行表示去重后的字符串。样例1输入helloworld输出helowrd样例2输入ddddededebaaaaaab输出deba提示:利用排序算法
解题思路:
- 首先将输入的字符串保存到一个新的字符串变量中。
- 对新的字符串进行排序,使相同的字符相邻。
- 遍历排序后的字符串,将第一个字符加入到结果字符串中。
- 依次遍历排序后的字符串,如果当前字符与前一个字符不相同,则将其加入到结果字符串中。
- 返回结果字符串作为去重后的字符串。
C++代码实现:
#include <iostream>
#include <algorithm>
using namespace std;
string removeDuplicates(string str) {
// 对字符串进行排序
sort(str.begin(), str.end());
// 去重
string result = "";
result += str[0];
for (int i = 1; i < str.length(); i++) {
if (str[i] != str[i-1]) {
result += str[i];
}
}
return result;
}
int main() {
string str;
cin >> str;
string result = removeDuplicates(str);
cout << result << endl;
return 0;
}
复杂度分析:
- 对字符串进行排序的时间复杂度为O(nlogn),n为字符串的长度。
- 遍历排序后的字符串并进行去重的时间复杂度为O(n)。
- 因此,总的时间复杂度为O(nlogn+n)=O(nlogn)。
- 空间复杂度为O(n),用于保存排序后的字符串和去重后的字符串
原文地址: https://www.cveoy.top/t/topic/h2eE 著作权归作者所有。请勿转载和采集!