题目的主要信息:

  • 获取一串字符串,要求去除重复的字符,请使用set解决
  • 直接从 set 中输出字符,不要求顺序

具体做法:

set是STL的集合容器,相同的元素在set中只保留一次,而且set还会依赖于红黑树自动排序,如果是字符依靠ASCⅡ码的大小排序。

我们建立一个set,遍历字符串,然后将每个字符都插入到set中,它会自动去重加排序,然后我们用迭代器遍历set,输出每个迭代器的元素即可。 alt

#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;
}

复杂度分析:

  • 时间复杂度:O(nlog2n)O(nlog_2n),其中nn为字符串长度,一共nn个字符,每次插入的代价都是O(log2n)O(log_2n)
  • 空间复杂度:O(n)O(n),集合的大小最坏为nn