---
# System prepended metadata

title: 1422. Maximum Score After Splitting a String
tags: [Leetcode]

---

# 1422. Maximum Score After Splitting a String

Given a string s of zeros and ones, return the maximum score after splitting the string into two non-empty substrings (i.e. left substring and right substring).

The score after splitting a string is the number of zeros in the left substring plus the number of ones in the right substring.

我只想的到這個QQ

## 暴力(n^2)
```javascript
var maxScore = function (s) {
    let max = 0
    for (let i = 0; i < s.length-1; i++) {
        let temp = 0
        for (let j = 0; j <= i; j++) {
            if (s[j] === "0") temp++
        }
        for (let k = i + 1; k < s.length; k++) {
            if (s[k] === "1") temp++
        }
        max = Math.max(max, temp)
    }
    return max
};
```

## One pass O(n)

分數 = 左0 + 右1
右1 = 全1 - 左1
分數 =  左0 + 全1 - 左1

找到 左0 - 左1 最大值，另外處理最後一個數，因為算法左右切分沒有考慮到

```javascript
var maxScore = function (s) {
    let ones = 0;
    let zeros = 0;
    let best = Number.MIN_SAFE_INTEGER; 

    for (let i = 0; i < s.length - 1; i++) {
        if (s.charAt(i) === '1') {
            ones++;
        } else {
            zeros++;
        }

        best = Math.max(best, zeros - ones);
    }

    if (s.charAt(s.length - 1) === '1') {
        ones++;
    }

    return best + ones;
};
```