思路

字符串长度很短,可以用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;
}