版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:[https://blog.csdn.net/weixin\_42449444/article/details/94058357](https://blog.csdn.net/weixin_42449444/article/details/94058357)
输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母,例如ac
[ac, ca]
acc
[acc, cac, cca]
蘑菇街19年校招题,一个典型的全排列问题。关于全排列问题,之前写到过一篇博文:全排列 next_permutation的使用,这里就不再介绍next_permutation了。需要注意的是:题目给出的字符串不一定是升序的,有个测试点是aA,如果不先用sort把字符串str升序排列一遍字符串的话,这个测试点会报错(预期输出是Aa, aA,而实际输出会是aA)。
#include <bits/stdc++.h>
using namespace std;
int main()
{
string str;
bool isVirgin = true; //判断是不是第一次
while(getline(cin,str))
{
string result = ""; //结果字符串
sort(str.begin(), str.end()); //题目中给出的字符串不一定是升序,有个测试点是aA,所以我们自己先升序排列一遍
do{
if(isVirgin)
{
result += "[" + str;
isVirgin = false;
}
else
{
result += ", " + str; //注意逗号后面有个空格
}
}while(next_permutation(str.begin(),str.end())); //全排列
result += "]";
cout << result << endl;
}
return 0;
}