读入之后,首先记录各个字母在字符串中出现的次数。这就相当于一个计数器,每次取出一个字母它的计数器就-1;
然后开始搜索,注意每一层搜索是按照26个小写字母循环,如果计数器不等于0,就可以取用;
最后输出 代码如下:
#include<bits/stdc++.h>
using namespace std;
int f[100],a[1000],i,n,ans;
char str[1000];
void dfs(int dep){
int r;
if (dep==n+1){
ans++;
for (r=1;r<=n;++r)
printf("%c",a[r]+96);
cout << endl;
return;
}
for (r=1;r<=26;++r)
if (f[r]>0){
a[dep]=r;
f[r]--;
dfs(dep+1);
f[r]++;
}
}
int main(){
cin >> n;
cin>>str;
for (i=0;i<n;++i)
f[str[i]-96]++;
dfs(1);
cout << ans << endl;
return 0;
}