如何在C++中删除重复的排列

How can I remove duplicated permutations in C++

本文关键字:排列 删除 C++      更新时间:2024-09-22
#include <iostream>
using namespace std;
void RecPermute(string soFar, string rest)
{

if (rest == "") {
cout << soFar << endl;
}
else {

for (int i = 0; i < rest.length(); i++) {
string next = soFar + rest[i];

string remaining = rest.substr(0, i) + rest.substr(i + 1);
RecPermute(next, remaining);

}
}
}
void ListPermutations(string s) {
RecPermute("",s);
}
int main()
{
RecPermute("", "aab");
return 0;
}

我正在做一项大学任务,任务是用这个代码打印字符排列。这段代码是这样做的,但重复的字符会导致重复的单词。例如如果我输入";aab";输出将是:aababaaabababaabaa

这是来自cppreference的std::next_preputation条目的示例源代码。它完全符合您的要求,并且自动不包括重复项:

#include <algorithm>
#include <string>
#include <iostream>

int main()
{
std::string s = "aba";
std::sort(s.begin(), s.end());
do {
std::cout << s << 'n';
} while(std::next_permutation(s.begin(), s.end()));
}

输出:

aab
aba
baa