1422. Maximum Score After Splitting a String #
题目 #
-
给你一个由若干
0
和1
组成的字符串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;
}
}