我有一个字符串,例如acaddef
或 bbaaddgg
。我必须尽快从中删除所有重复字符。因此,例如,pooaatat
之后应该看起来像 poat
而 ggaatpop
应该看起来像 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/