题目描述
输入一个可能含有重复字符的字符串,打印出该字符串中所有字符的全排列。
输入
单组测试数据,输入数据是一个长度不超过10个字符的字符串,以逗号结尾。
输出
打印出该字符串中所有字符的全排列。以字典序顺序输出,用空格分隔。
样例输入
abc,
样例输出
abc acb bac bca cab cba
#include <bits/stdc++.h>
using namespace std;
char str[12];
void f(char *str,int size)
{
int j=0,k=0;
while(1)
{
printf("%s ",str);
for(j=size-2;j>=0&&str[j]>=str[j+1];j--);
if(j<0) return;
for(k=size-1;k>j&&str[k]<=str[j];k--);
swap(str[j],str[k]);
for(int l=j+1,r=size-1;l<r;l++,r--)
swap(str[l],str[r]);
}
}
int main()
{
cin.getline(str,12,',');
int size=strlen(str);
sort(str,str+size);
f(str,size);
}