思路
字符串长度很短,可以用dfs,先将每个字符的数量存起来,然后枚举新串每个字符。
记得回溯。
ACnode
#include<bits/stdc++.h>
using namespace std;
map<char,int>cnt;
int len;//字符串长度
int ans=0;//好串数量
void dfs(int pos,map<char,int>&cnt,char ch)
{
if(pos==len)//枚举完,好串数量++;
{
ans++;
return;
}
for(auto&[c,ct]:cnt)
{
if(ct>0)
{
if(c!=ch)//保证新的字符不等于上一个字符
{
cnt[c]--;
dfs(pos+1,cnt,c);
cnt[c]++;//回溯
}
}
}
}
int main()
{
string s;
cin>>s;
len=s.length();
for(auto&c:s)//存字符数量
{
cnt[c]++;
}
dfs(0,cnt,'\0');
cout<<ans<<endl;
return 0;
}

京公网安备 11010502036488号