这道题唯一要注意的是(如果你开的是string),不能用for循环输入!
要直接cin >> a,然后用 a=’-’+a 将a字符串下标整体向后移1位。
因为n小于等于3000,直接暴力搜索。
代码如下:
#include <iostream>
#include <cstring>
#include <string>
#include <algorithm>
#include <queue>
#include <stack>
#include <iomanip>
#include <math.h>
#include <cmath>
#include <ctime>
#include <cstdio>
#define inf 99999
#define ll long long
//#include <windows.h>
//#include <bits/stdc++.h>
using namespace std;
string a;
int n;
//string tmp;
bool check(int x,int y){//检查是否为回文
while(x<y){
if(a[x]==a[y]){
x++;
y--;
}else{
return false;
}
}
return true;
}
int count(int x,int y){//统计一共有多少个CSP
int cnt=0;
for(int i=x;i<=y-2;i++){
if(a[i]=='C'&&a[i+1]=='S'&&a[i+2]=='P'){
cnt++;
}
}
return cnt;
}
int main() {
//freopen("***.in","r",stdin);
//freopen("***.out","w",stdout);
cin >> n;
cin >> a;//直接输入
a='_'+a;//整体向后一位
int nn=count(1,n);
int Max=0;
for(int i=5; i<=n; i++) {//循环字符串长度
for(int j=1; j<=n-i+1; j++) {//循环每个字符串
if(check(j,j+i-1)){
int tmp=count(j,j+i-1);
Max=max(Max,tmp);
}
if(Max==nn){
cout << Max << endl;
return 0;
}
}
}
cout << Max << endl;
return 0;
}