我有一个看起来非常简单的解决方案:
void determineStringUnique(std::string str) {
std::sort(str.begin(), str.end()); //sort characters
std::unique(str.begin(), str.end()); //remove duplicate characters in a row (why we did std::sort right before)
std::cout << str.size() << std::endl;
}
(我意识到这个功能还没有完成,我只是在研究 std::unique 之后的大小。剩下要做的就是检查新大小是否等于原始大小 - 如果是,那么只有独特的字符)。
但是当我打印出 str.size() 时,它总是等于原始字符串的长度。经过一些调试后,我发现 std::unique 删除了预期的(重复的)字符,但字符串中总有一些地方添加了一些字符等,我不知道为什么。
这是一个示例输入:“abcdefghijklmnopabc”。在 std::sort 之后,我得到了“aabbccdefghijklmnop”,正如预期的那样。但是在 std::unique 之后,我得到了“abcdefghijklmnopnop”,这意味着它在末尾添加了“nop”,但在开头确实去掉了额外的 a、b 和 c。
如果有人对此有答案,将不胜感激。谢谢!