(牛客) 游游的字符重排(next_permutation的使用)


题目描述

游游定义一个字符串是“好串”,当且仅当该字符串相邻的字符不相等。例如"arcaea"是好串,而"food"不是好串。

游游拿到了一个字符串,她可以将该字符串的各个字符顺序随意打乱。她想知道一共可以生产多少种不同的好串?

输入描述:

一个仅包含小写字母的字符串,长度不超过10。

输出描述:

好串的数量。

示例1

输入

aab

输出

1

说明

只有"aba"这一种好串。

示例2

输入

arc

输出

6

示例3

输入

aaa

aaa

输出

0
#include
#include
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;
}

【用法总结】C++ STL中 next_permutation函数的用法_荷叶田田_的博客-CSDN博客

你可能感兴趣的:(开发语言,算法)