Welcome to Subscribe On Youtube
1422. Maximum Score After Splitting a String
Description
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
Constraints:
2 <= s.length <= 500
- The string
s
consists of characters'0'
and'1'
only.
Solutions
-
class Solution { public int maxScore(String s) { int ans = 0; for (int i = 1; i < s.length(); ++i) { int t = 0; for (int j = 0; j < i; ++j) { if (s.charAt(j) == '0') { ++t; } } for (int j = i; j < s.length(); ++j) { if (s.charAt(j) == '1') { ++t; } } ans = Math.max(ans, t); } return ans; } }
-
class Solution { public: int maxScore(string s) { int ans = 0; for (int i = 1, n = s.size(); i < n; ++i) { int t = 0; for (int j = 0; j < i; ++j) { t += s[j] == '0'; } for (int j = i; j < n; ++j) { t += s[j] == '1'; } ans = max(ans, t); } return ans; } };
-
class Solution: def maxScore(self, s: str) -> int: return max(s[:i].count('0') + s[i:].count('1') for i in range(1, len(s)))
-
func maxScore(s string) int { ans := 0 for i, n := 1, len(s); i < n; i++ { t := 0 for j := 0; j < i; j++ { if s[j] == '0' { t++ } } for j := i; j < n; j++ { if s[j] == '1' { t++ } } ans = max(ans, t) } return ans }
-
function maxScore(s: string): number { const n = s.length; let res = 0; let score = 0; if (s[0] === '0') { score++; } for (let i = 1; i < n; i++) { if (s[i] === '1') { score++; } } res = Math.max(res, score); for (let i = 1; i < n - 1; i++) { if (s[i] === '0') { score++; } else if (s[i] === '1') { score--; } res = Math.max(res, score); } return res; }
-
impl Solution { pub fn max_score(s: String) -> i32 { let n = s.len(); let mut res = 0; let mut score = 0; let bs = s.as_bytes(); if bs[0] == b'0' { score += 1; } for i in 1..n { if bs[i] == b'1' { score += 1; } } res = res.max(score); for i in 1..n - 1 { if bs[i] == b'0' { score += 1; } else if bs[i] == b'1' { score -= 1; } res = res.max(score); } res } }