Track a signed balance and close a substring whenever it returns to zero; taking every earliest closure maximizes the count.
Complexity
O(n) time and O(1) space.
Find the maximum number of balanced substrings containing equal counts of L and R.
Track a signed balance and close a substring whenever it returns to zero; taking every earliest closure maximizes the count.
O(n) time and O(1) space.
package main
func balancedStringSplit(s string) int {
balance, parts := 0, 0
for _, character := range s {
if character == 'L' {
balance++
} else {
balance--
}
if balance == 0 {
parts++
}
}
return parts
}
class Solution:
def balancedStringSplit(self, s: str) -> int:
balance = parts = 0
for character in s:
balance += 1 if character == "L" else -1
if balance == 0: parts += 1
return parts
function balancedStringSplit(s: string): number {
let balance = 0; let parts = 0;
for (const character of s) { balance += character === "L" ? 1 : -1; if (balance === 0) parts += 1; }
return parts;
}