输入一个可能含有重复字符的字符串,打印出该字符串中所有字符的全排列,输出时以字典序顺序输出,用空格分隔。
输入数据是一个长度不超过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;
}
这是一篇关于计蒜客在线判题平台(OJ)中一道难题的解析,涉及字符全排列问题。题目要求输入一个可能包含重复字符的字符串,并输出所有字符的字典序排列,以空格分隔。输入字符串长度不超过10个字符,并以逗号结尾。样例1未给出具体输入和输出,但可以理解为实际解题过程中的示例。
19万+

被折叠的 条评论
为什么被折叠?



