使用 STL 从字符串中删除重复字符
Posted
技术标签:
【中文标题】使用 STL 从字符串中删除重复字符【英文标题】:Removing duplicate characters from string using STL 【发布时间】:2014-01-14 18:37:29 【问题描述】:有没有办法从字符串中删除重复字符,就像它们可以从向量中删除一样,如下所示
sort( vec.begin(), vec.end() );
vec.erase( unique( vec.begin(), vec.end() ), vec.end() );
还是我只需要编写一个基本的解决方案? 我的想法:
我可以将所有字符添加到一个集合中
【问题讨论】:
字符串和向量完全一样。 这取决于您所说的“重复”字符是什么意思。字符串"ABACADAF"
是否有重复的A
s?或者你只是想让"AABACAD"
删除双AA
中的第一个A
?
为什么你会选择O(n log(n))
解决方案,而你可以在O(n)
中进行,正如在第二种方法中here 中所解释的那样?
谢谢,原来我错过了 str.erase(...) 中的“str”部分,最终出现错误,认为这无法完成......我的错......
【参考方案1】:
C++ 算法和容器设计的重点在于,算法尽可能与容器无关。
因此,适用于向量的相同算法也适用——当然! – 在字符串上。
std::sort(str.begin(), str.end());
str.erase(std::unique(str.begin(), str.end()), str.end());
同样的方法甚至适用于旧式 C 字符串——只是你不能 erase
它们的尾部,你需要通过重新设置空终止字符来手动截断它们(并且没有 begin
和end
成员函数,因此您可以使用指向第一个和倒数第二个字符的指针。
【讨论】:
以上是关于使用 STL 从字符串中删除重复字符的主要内容,如果未能解决你的问题,请参考以下文章
使用字符分隔符在 C++ 中解析字符串,但在每个解析的子字符串中保留可重复的字符作为分隔符(C++ STL)