最优打字策略

Table of Contents

最优打字策略

题目描述

在英文的输入中,我们经常会遇到大小写切换的问题,频繁切换大小写会增加我们的按键次数,也会降低我们的打字效率。

众所周知,切换大小写有两种方式,一种是按下“caps locks”,也就是大写锁定键,这样一来,之后的输入模式都会被切换。另一种是同时按下shift和需要打印的字母,可以临时切换大小写(算作按下两个键)。
已知初始状态下,打字模式是小写,现在给出需要打印的字符串(区分大小写),请你计算出最少需按键多少次才能打印出来。

输入

输入第一行仅包含一个正整数n,表示字符串的长度(1<=n<=1000000)。

输入第二行包含一个长度为n的字符串,仅包含大小写字母。

输出

输出仅包含一个正整数,即最少的按键次数。

样例输入
6
AaAAAA
样例输出
8

    #include<bits/stdc++.h>
    typedef long long ll;
    const int maxn = 1e3 + 5;
    const int INF = 0x3f3f3f3f;
    const int MOD = 1e9 + 7;
    using namespace std;
    int main() {
        int n, flag = 0, sum;
        string p;
        cin >> n >> p;
        sum = p.length();
        for (int i = 0; i < p.length(); i++) {
            if (p[i] > 'Z' && flag == 1) {
                if (i + 1 < p.length() && p[i + 1] > 'Z') {
                    flag = 0;
                }
                sum++;
            }
            else if (p[i] < 'a' && flag == 0) {
                if (i + 1 < p.length() && p[i + 1] < 'a') {
                    flag = 1;
                }
                sum++;
            }
        }
        cout << sum << endl;
        return 0;
    }

据说上面的代码是正确答案,但是没看懂