1422. Maximum Score After Splitting a String

1422. Maximum Score After Splitting a String #

题目 #

  • 给你一个由若干 01 组成的字符串 s ,请你计算并返回将该字符串分割成两个 非空 子字符串(即 子字符串和 子字符串)所能获得的最大得分。

  • 「分割字符串的得分」为 子字符串中 0 的数量加上 子字符串中 1 的数量。

思路 #

模拟 #

代码 #

模拟 #

class Solution {
    public int maxScore(String s) {
        int N = s.length();
        /** 令zeros[i]记录截止下标i处字符串中共出现了多少个0 */
        int[] zeros = new int[N], ones = new int[N];
        for (int i = 0; i < N; i++) {
            switch (s.charAt(i)) {
                case '0': 
                    zeros[i] = i == 0 ? 1 : zeros[i-1] + 1;
                    ones[i] = i == 0 ? 0 : ones[i-1];
                    break;
                case '1': 
                    ones[i] = i == 0 ? 1 : ones[i-1] + 1;
                    zeros[i] = i == 0 ? 0 : zeros[i-1];
                    break;
            }
        }

        int ans = 0;
        for (int i = 0; i < N-1; i++) {
            ans = Math.max(ans, zeros[i] + ones[N-1]-ones[i]);
        }
        return ans;
    }
}

致谢 #

宫水三叶