题目描述
游游定义一个字符串是“好串”,当且仅当该字符串相邻的字符不相等。例如"arcaea"是好串,而"food"不是好串。
游游拿到了一个字符串,她可以将该字符串的各个字符顺序随意打乱。她想知道一共可以生产多少种不同的好串?
输入描述:
一个仅包含小写字母的字符串,长度不超过10。
输出描述:
好串的数量。
示例1
输入
aab
输出
1
说明
只有"aba"这一种好串。
示例2
输入
arc
输出
6
示例3
输入
aaa
aaa
输出
0
#include<iostream>
#include<algorithm>
using namespace std;
const int N = 1e5 + 10;
int a[N];
int panduan(string a) //判断当前排列组合是否符合好串
{
int n = a.length();
int i = 1;
while (i <= n)
{
if (a[i] == a[i - 1]) return 0;
i++;
}
return 1;
}
int main()
{
string a; cin >> a;
sort(a.begin(), a.end());
int sum = 0;
do {
sum += panduan(a);
} while (next_permutation(a.begin(), a.end()));
//会输出一段序列的全排序,有返回true,无返回false
cout << sum << endl;
}