Creating Strings
题目描述
Given a string, your task is to generate all different strings that can be created using its characters.
输入
The only input line has a string of length n(1 ≤ n ≤ 8). Each character is between a–z.
输出
First print an integer k: the number of strings. Then print k lines: the strings in alphabetical order.
样例输入
aabac
样例输出
20
aaabc
aaacb
aabac
aabca
aacab
aacba
abaac
abaca
abcaa
acaab
acaba
acbaa
baaac
baaca
bacaa
bcaaa
caaab
caaba
cabaa
cbaaa
代码
#include<bits/stdc++.h>
#define ll long long
using namespace std;
int len;
string str;
int main(){ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);cin>>str;len=str.size();int d[26]={0};ll total=1;for(int i=1;i<=len;i++){total*=i;}for(int i=0;i<len;i++){d[str[i]-'a']++;}int ans[len],t=0;for(int i=0;i<26;i++){while(d[i]){total/=d[i];ans[t]=(int)(i+'a');t++;d[i]--;}}cout<<total<<"\n";for(int i=0;i<len;i++){cout<<(char)ans[i];}cout<<"\n";while(next_permutation(ans,ans+len)){for(int i=0;i<len;i++){cout<<(char)ans[i];}cout<<"\n";}return 0;
}