giai bai tap

 avatar
unknown
c_cpp
4 years ago
1.3 kB
6
Indexable
#include <bits/stdc++.h>
using namespace std;

#define pii pair<int, int>
#define fi first
#define se second

string S;
vector<pii> ID[25];

void split()
{
    int L = 0;
    for (int R = 0; R < S.size(); R++)
        if (S[R] != S[R + 1])
        {
            int chr = S[R] - 65;
            ID[chr].push_back({L, R});
            L = R + 1;
        }
}
int cnt(int vt, int size)
{
    if (size == 1)
        return (ID[vt][0].se - ID[vt][0].fi + 1);
    else if (size == 2)
    {
        if (ID[vt][1].fi - ID[vt][0].se == 2)
            return (ID[vt][0].se - ID[vt][0].fi + 1) + (ID[vt][1].se - ID[vt][1].fi + 1);
    }
    else
    {
        int max_length = INT_MIN;
        for (int i = 1; i < ID[vt].size(); i++)
            if (ID[vt][i].fi - ID[vt][i - 1].se == 2)
            {
                int length = (ID[vt][i].se - ID[vt][i].fi + 1) + (ID[vt][i - 1].se - ID[vt][i - 1].fi + 1) + 1;
                max_length = max(max_length, length);
            }
        return max_length;
    }
}
void process()
{
    int ans = INT_MIN;
    for (int i = 0; i <= 25; i++)
        if (ID[i].size() != 0)
            ans = max(ans, cnt(i, ID[i].size()));
    cout << ans;
}
int main()
{
    cin >> S;
    split();
    process();
    return 0;
}
Editor is loading...