如何在C++中删除重复的排列
How can I remove duplicated permutations in C++
#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
相关文章:
- 比较并显示使用最小值(a,b)和最大值(a、b)升序排列的4个数字
- 将数组的地址分配给变量并删除
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- C/C++编译器通常会删除重复的库吗
- 从链接列表c++中删除一个项目
- 为什么不;名字在地图上是按顺序排列的吗
- C++如何通过用户输入删除列表元素
- 为什么在C++中使用私有复制构造函数与删除复制构造函数
- 是否需要删除包含对象的"pair"?
- 如何在自删除后将对象设置为nullptr
- 迭代时从向量和内存中删除对象
- C++优先级队列,按对象的唯一指针的特定方法升序排列
- 使用函数"remove"删除重复元素
- 如何从多映射中删除特定的重复项
- 运算符C++ "delete []"仅删除 2 个前值
- 删除指向指针的指针是运行时错误吗
- 将指针设置为"nullptr"并不能防止双重删除?
- 为什么示例代码访问IUnknown中已删除的内存
- 用于删除符号并生成排列的算法
- (排列?)通过逐字符删除字符串