题意:给你一个长度为n的字符串s,问s的所有排列中不包含(长度为k的子串是回文串)的字符串的数量。
思路:用全排列函数枚举出所有情况,之后暴力去判断子串是不是回文串。
全排列函数:
函数原型:bool next_permutation(iterator start, iterator end);
返回值:布尔型
函数本体:
next_permutation(开始,结束),输出所有比当前排列大的排列,顺序是从小到大。
prev_permutation(开始,结束),输出所有比当前排列小的排列,顺序是从大到小。
字符串截取函数:s.substr(截取起始位置的下标,截取长度)
ac代码如下:
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
int n,k;
bool check(string mc)
{
for(int i=0,j=k-1;i<j;i++,j--)
{
if(mc[i]!=mc[j]) return true;
}
return false;
}
int main()
{
cin>>n>>k;
string grn;
cin>>grn;
sort(grn.begin(),grn.end());
int ans=0;
do
{
bool flag=true;
for(int i=0;i+k<=grn.size();i++)
{
string t=grn.substr(i,k);
if(check(t)) continue;
flag=false;
}
if(flag) ans++;
}while(next_permutation(grn.begin(),grn.end()));
cout<<ans<<endl;
return 0;
}