前言:
这篇文章还是是为了帮助一些
像我这样的菜鸟
找到简单的题解
题目描述
有一种项链,由红宝石和蓝宝石组成。
仅当红宝石和蓝宝石数目相同的时候,项链才最稳定,不易断链。
小爱想知道从给定的项链中,
可以截取一段最长的稳定的子串,
有多少颗宝石组成。
红宝石用‘R’表示,
蓝宝石用‘B’表示。
输入描述
一行由R和B组成的字符串。
输出描述
最长的稳定的子串由多少颗宝石组成。
输入样例#1
BRBBRB
输出样例#1
4
提示
数据范围:
宝石数<=1000
本题线下文件测评时的说明:
- 可执行文件名:stone
- 提交源程序文件名:stone.cpp
- 输入文件名:stone.in
- 输出文件名:stone.out
- 时间限制:1秒
- 空间限制:256MB
完整代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll maxn = 1005;
ll maxs = INT_MIN;
string s;
ll r[maxn],b[maxn];
int main ()
{
//freopen ("stone.in","r",stdin);
//freopen ("stone.out","w",stdout);
cin >> s;
for (ll i = 0; i < s.size(); i++)
{
if (s[i] == 'R') {
r[i + 1] = r[i] + 1;
b[i + 1] = b[i];
}
else if (s[i] == 'B')
{
b[i + 1] = b[i] + 1;
r[i + 1] = r[i];
}
}
for (ll i = 1; i <= s.size(); i++)
{
for (ll j = i + 1; j <= s.size(); j++)
{
if (r[j] - r[i - 1] == b[j] - b[i - 1])
{
maxs = max (r[j] - r[i - 1] + b[j] - b[i - 1], maxs);
}
}
}
cout << maxs << endl;
return 0;
}