有没有办法从字符串中删除重复字符,就像可以从向量中删除一样
sort( vec.begin(), vec.end() );
vec.erase( unique( vec.begin(), vec.end() ), vec.end() );
我需要为此编写一个基本的解决方案吗?
我想到的是:
我可以将所有字符添加到一个集合中。
C++的算法和容器设计的整个关点在于,尽可能地让算法与容器无关。
因此,适用于向量的相同算法当然也适用于字符串。
std::sort(str.begin(), str.end());
str.erase(std::unique(str.begin(), str.end()), str.end());
同样的方法也适用于旧式C字符串——唯一的区别在于你不能erase
它们的尾巴,你需要通过重新设置空终止字符来手动截断它们(并且没有begin
和end
成员函数,所以你需要使用指向第一个字符和最后一个字符之后的指针)。
"ABACADAF"
是否有重复的A
?或者您只想要"AABACAD"
,以删除双重AA
中的第一个A
? - Zac HowlandO(n log(n))
的解决方案,而不是使用第二种方法在O(n)
的时间内完成呢?具体细节请参见这里。 - adrin