题目名称

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

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

示例

输入:s = “011101”

输出:5

题解

根据题意可以,分割成的两个字符串 非空,左边计算 0 的数量,右边计算 1 的数量

所以首先我们计算出字符串中字符 1 的个数

接下来从左向右遍历,如果遇见0,则 0 的个数 +1, 如果遇到1,则1的个数 -1,然后将目前最大得分与 0的个数和1的个数和进行对比,取最大值

答案

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
var maxScore = function(s) {
let one = 0, zero = 0
for(let i = 0; i < s.length; i++) {
if(s[i] === "1") one++
}
let max = 0

for(let i = 0; i < s.length - 1; i++) {
if(s[i] === "1") {
one--
} else {
zero++
}
max = Math.max(max, zero + one)
}
return max
};