Codeforces 877 B Nikita and string

来源:互联网 发布:jsoup实例源码 编辑:程序博客网 时间:2024/05/21 06:00

题目地址
题意:给你一个字符串让你删除一些字符,使得可以分割成3个字符串,第一,三个全是a,第二个全是b,这个删完的字符串最长多少?
思路:我们遍历字符串,如果当前字符为a,那我们可以构成a或aba,如果是b的话,那就是可以构成ab的,然后每次遍历之后我们要转移,因为我们发现当前是a的我们可以继续构成a或者ab,ab的我们可以构成aba或者ab,所以我们对于ab就取ab和a的较大者,aba就取ab或者aba的较大者。

#include <iostream>#include <cstring>#include <string>#include <queue>#include <vector>#include <map>#include <set>#include <cmath>#include <cstdio>#include <algorithm>#include <iomanip>#define N 10#define M 2000010//双倍#define LL __int64#define inf 0x3f3f3f3f3f3f3f3f#define lson l,mid,ans<<1#define rson mid+1,r,ans<<1|1#define getMid (l+r)>>1#define movel ans<<1#define mover ans<<1|1using namespace std;const LL mod = 1000000007;const double eps = 0.001;int main() {    cin.sync_with_stdio(false);    string str;    int a, ab, aba;    while (cin >> str) {        int len = str.length();        a = 0, ab = 0, aba = 0;        for (int i = 0; i < len; i++) {            if (str[i] == 'a') {                a++, aba++;            }            else {                ab++;            }            aba = max(aba, ab);            ab = max(ab, a);        }        cout << aba << endl;    }    return 0;}
原创粉丝点击