Plasticine zebra
time limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard output

Is there anything better than going to the zoo after a tiresome week at work? No wonder Grisha feels the same while spending the entire weekend accompanied by pretty striped zebras.

Inspired by this adventure and an accidentally found plasticine pack (represented as a sequence of black and white stripes), Grisha now wants to select several consequent (contiguous) pieces of alternating colors to create a zebra. Let's call the number of selected pieces the length of the zebra.

Before assembling the zebra Grisha can make the following operation 

Determine the maximum possible length of the zebra that Grisha can produce.

Input

The only line contains a string b' denotes a black piece.

Output

Print a single integer — the maximum possible zebra length.

Examples
input
Copy
bwwwbwwbw
output
Copy
5
input
Copy
bwwbwwb
output
Copy
3
Note

In the first example one of the possible sequence of operations is bwwwbww|bw 5.

In the second example no operation can increase the answer.

题意:没有连续的b和w的字符串为zebra length,求一个字符串的zebra length最长长度,字符串可变化:将字符串分成两部分然后倒置每部分组成新的字符串

分析:考虑字符串的变化:将字符串分为前缀和后缀两部分,字符串的变化就是将后缀倒置前缀倒置

  考虑将两个一样的字符串连接在一起得到新字符串,则新字符串的子串包含了原来一个字符串的所有变化

AC代码:

#include <map>
#include <set>
#include <stack>
#include <cmath>
#include <queue>
#include <cstdio>
#include <vector>
#include <string>
#include <bitset>
#include <cstring>
#include <iomanip>
#include <iostream>
#include <algorithm>
#define ls (r<<1)
#define rs (r<<1|1)
#define debug(a) cout << #a << " " << a << endl
using namespace std;
typedef long long ll;
const ll maxn = 1e6+10;
const ll mod = 998244353;
const double pi = acos(-1.0);
const double eps = 1e-8;
map<string,ll> mp;
string s;
int main() {
    ios::sync_with_stdio(0);
    cin >> s;
    string ts = "";
    ts = s + s;
    ll ans = 1, maxans = -1;
    for( ll i = 0; i < ts.length(); i ++ ) {
        if( i == 0 ) {
            continue;
        }
        if( ts[i] != ts[i-1] ) {
            ans ++;
            if( i == ts.length()-1 ) {
                maxans = max(maxans,ans);
            }
        } else {
            maxans = max(maxans,ans);
            ans = 1;
        }
    }
    if( maxans > s.length() ) {
        maxans = maxans - s.length();
    }
    cout << maxans << endl;
    return 0;
}

  

相关文章:

  • 2022-01-07
  • 2022-02-22
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-01-26
  • 2022-02-14
猜你喜欢
  • 2022-12-23
  • 2022-03-06
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-12-05
  • 2021-06-10
相关资源
相似解决方案