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


题目描述

游游定义一个字符串是“好串”,当且仅当该字符串相邻的字符不相等。例如"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;
}

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值