题目的主要信息:
- 获取一串字符串,要求去除重复的字符,请使用set解决
- 直接从 set 中输出字符,不要求顺序
具体做法:
set是STL的集合容器,相同的元素在set中只保留一次,而且set还会依赖于红黑树自动排序,如果是字符依靠ASCⅡ码的大小排序。
我们建立一个set,遍历字符串,然后将每个字符都插入到set中,它会自动去重加排序,然后我们用迭代器遍历set,输出每个迭代器的元素即可。
#include <iostream>
#include <set>
using namespace std;
int main() {
char str[100] = { 0 };
cin.getline(str, sizeof(str));
set<char> s;
for(int i = 0; str[i] != '\0'; i++) //遍历字符串
s.insert(str[i]); //将字符加入到set中
for(auto iter = s.begin(); iter != s.end(); iter++) //遍历set输出字符
cout << *iter;
return 0;
}
复杂度分析:
- 时间复杂度:,其中为字符串长度,一共个字符,每次插入的代价都是
- 空间复杂度:,集合的大小最坏为