Maximum Score After Splitting a String

easy string prefix sum

Problem

Given a binary string s, split it into a non-empty left and right part. The score equals (zeros in left) + (ones in right). Return the maximum score.

Inputs = "011101"
Output5
Split after index 0: left "0" has 1 zero, right "11101" has 4 ones → 5.

def max_score(s):
    ones = s.count('1')
    zeros = 0
    best = 0
    for i in range(len(s) - 1):
        if s[i] == '0': zeros += 1
        else: ones -= 1
        best = max(best, zeros + ones)
    return best
function maxScore(s) {
  let ones = 0;
  for (const c of s) if (c === '1') ones++;
  let zeros = 0, best = 0;
  for (let i = 0; i < s.length - 1; i++) {
    if (s[i] === '0') zeros++;
    else ones--;
    best = Math.max(best, zeros + ones);
  }
  return best;
}
class Solution {
    public int maxScore(String s) {
        int ones = 0;
        for (char c : s.toCharArray()) if (c == '1') ones++;
        int zeros = 0, best = 0;
        for (int i = 0; i < s.length() - 1; i++) {
            if (s.charAt(i) == '0') zeros++; else ones--;
            best = Math.max(best, zeros + ones);
        }
        return best;
    }
}
int maxScore(string s) {
    int ones = 0;
    for (char c : s) if (c == '1') ones++;
    int zeros = 0, best = 0;
    for (int i = 0; i < (int)s.size() - 1; i++) {
        if (s[i] == '0') zeros++; else ones--;
        best = max(best, zeros + ones);
    }
    return best;
}
Time: O(n) Space: O(1)