c++ - 从字符串中删除重复字符

标签 c++ string algorithm character

我有一个字符串,例如acaddefbbaaddgg。我必须尽快从中删除所有重复字符。因此,例如,pooaatat 之后应该看起来像 poatggaatpop 应该看起来像 gatpo。是否有任何内置函数或算法可以快速做到这一点?我尝试搜索 STL,但没有令人满意的结果。

最佳答案

好的,这里有 4 种不同的解决方案。

固定数组

std::string str = "pooaatat";

// Prints "poat"
short count[256] = {0};
std::copy_if(str.begin(), str.end(), std::ostream_iterator<char>(std::cout),
             [&](unsigned char c) { return count[c]++ == 0; });

计数算法+迭代器

std::string str = "pooaatat";

// Prints "poat"
std::string::iterator iter = str.begin();
std::copy_if(str.begin(), str.end(), std::ostream_iterator<char>(std::cout),
             [&](char c) { return !std::count(str.begin(), iter++, c); });

无序集

std::string str = "pooaatat";

// Prints "poat"
std::unordered_set<char> container;
std::copy_if(str.begin(), str.end(), std::ostream_iterator<char>(std::cout),
             [&](char c) { return container.insert(c).second; });

无序 map

std::string str = "pooaatat";

// Prints "poat"
std::unordered_map<char, int> container;
std::copy_if(str.begin(), str.end(), std::ostream_iterator<char>(std::cout),
             [&](char c) { return container[c]++ == 0; });

关于c++ - 从字符串中删除重复字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25947077/

相关文章:

python - 如何使用 string.translate() 来翻译这个?

安卓 ListView : don't show all strings

c++ - 指针行为怪异

c++ - 使用带有 EMBARCADERO RAD C++ XE5 的 Boost 图形库

c++ - 如何在基类中存储和执行派生类成员函数

java - Java中的巴比伦算法

php - 如何全天将系统中的线索平均分配给两方?

c++ - 使用vector引发 'std::out_of_range'错误实例后调用终止

java - 如何在 Java 中截断 n 个单词后的字符串?

algorithm - 分而治之 - 比较所有可能的组合