输入一个可能含有重复字符的字符串,打印出该字符串中所有字符的全排列,输出时以字典序顺序输出,用空格分隔。
输入数据是一个长度不超过10个字符的字符串,以逗号结尾。
样例1
输入:
abc,
输出:
abc acb bac bca cab cba
#include<iostream>
#include<string>
#include<set>
using namespace std;
string s;
int n;
set<string> res;
void dfs(int i){
if(i == n){
return;
}
res.insert(s);
for(int j = i; j < n; ++j){
swap(s[i], s[j]);
dfs(i + 1);
swap(s[i], s[j]);
}
}
int main(){
cin >> s;
n = s.length() - 1;
s.resize(n);
dfs(0);
set<string>::iterator it = res.begin();
cout << *it;
for(++it; it != res.end(); ++it){
cout << " " << *it;
}
cout << endl;
}