蓝桥OJ:3419小郑的蓝桥平衡串—>注意前缀和数组与字符数组下标对齐

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
代码如下:
#include <bits/stdc++.h>
using namespace std;
const int N=1e3+10;//字符串长度不大
int prefix[N];//开一个前缀和数组
int main()
{
//选择1:由于计算机中字符数组从0开始,而设定prefix数组下标从1开始
//那么后续需要修改下标为(s[i-1]==‘L’?1:-1)
//string s;cin>>s;
//int n=s.length();

//选择2:与选择1同理
//strlen针对char类型 后续同样要修改下标为(s[i-1]==‘L’?1:-1)
//char s[N];cin>>s;
//int n=strlen(s);

//选择3 从字符数组的第一位开始输入 计算大小时也从第一个位置开始 第0位默认为空
//那么最后s数组和prefix数组下标都为1,不需要修改下标(s[i-1]==‘L’?1:-1)
char s[N];cin>>s;
int n=strlen(s);

//对于整个字符数组 设定prefix前缀和数组 设定时做判断 如果该字符是L设为1 否则-1
for(int i=1;i<=n;++i)
prefix[i]=prefix[i-1]+(s[i-1]==‘L’?1:-1);

int answer=0;
//枚举区间 对于各个区间都进行判断
for(int i=1;i<=n;++i)
{
for(int j=1;j<=n;++j)
{
//根据前缀和定义判断出某段区间和为0 说明该段符合题意
//每个区间都会判断 将最终的最大值赋值给answer
if(prefix[j]-prefix[i-1]==0)
answer=max(answer,j-i+1);
}
}
cout<<answer;
return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值