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.

Example 1

Input: s = "011101"
Output: 5 
Explanation: 
All possible ways of splitting s into two non-empty substrings are:
left = "0" and right = "11101", score = 1 + 4 = 5 
left = "01" and right = "1101", score = 1 + 3 = 4 
left = "011" and right = "101", score = 1 + 2 = 3 
left = "0111" and right = "01", score = 1 + 1 = 2 
left = "01110" and right = "1", score = 2 + 1 = 3

Example 2

Input: s = "00111"
Output: 5
Explanation: When left = "00" and right = "111", we get the maximum score = 2 + 3 = 5

Example 3

Input: s = "1111"
Output: 3

Method 1

【O(n) time | O(n) space】
package Leetcode.DynamicProgramming;

/**
 * @author zhengxingxing
 * @date 2025/01/01
 */
public class MaximumScoreAfterSplittingaString {
    public static int maxScore(String S) {
        char[] s = S.toCharArray();

        // Count initial number of ones (initial right substring score)
        int score = 0;
        for (char c: s){
            score += c - '0';
        }

        // Find maximum score by trying each split position
        int ans = 0;
        for (int i = 0; i < s.length - 1; i++) {
            score += s[i] == '0' ? 1 : -1;  // Adjust score based on current character
            ans = Math.max(ans, score);      // Update maximum score if current is higher
        }

        return ans;
    }

    public static void main(String[] args) {
        // Test case 1: Mixed zeros and ones
        String s1 = "011101";
        System.out.println("Test case 1: " + s1);
        System.out.println("Expected: 5");
        System.out.println("Result: " + maxScore(s1));

        // Test case 2: Zeros followed by ones
        String s2 = "00111";
        System.out.println("\nTest case 2: " + s2);
        System.out.println("Expected: 5");
        System.out.println("Result: " + maxScore(s2));

        // Test case 3: All ones
        String s3 = "1111";
        System.out.println("\nTest case 3: " + s3);
        System.out.println("Expected: 3");
        System.out.println("Result: " + maxScore(s3));
    }
}




Enjoy Reading This Article?

Here are some more articles you might like to read next:

  • 2264. Largest 3-Same-Digit Number in String
  • 3042. Count Prefix and Suffix Pairs I
  • 1016. Binary String With Substrings Representing 1 To N
  • 1408. String Matching in an Array
  • 3019. Number of Changing Keys