leetcodeJS

Personal solution for leetcode problem using Javascript

View on GitHub

Problem

Balanced strings are those that have an equal quantity of ‘L’ and ‘R’ characters.

Given a balanced string s, split it into some number of substrings such that:

Each substring is balanced.

Return the maximum number of balanced strings you can obtain.

Example 1:

Input: s = “RLRRLLRLRL” Output: 4 Explanation: s can be split into “RL”, “RRLL”, “RL”, “RL”, each substring contains same number of ‘L’ and ‘R’.

Example 2:

Input: s = “RLRRRLLRLL” Output: 2 Explanation: s can be split into “RL”, “RRRLLRLL”, each substring contains same number of ‘L’ and ‘R’. Note that s cannot be split into “RL”, “RR”, “RL”, “LR”, “LL”, because the 2nd and 5th substrings are not balanced.

Example 3:

Input: s = “LLLLRRRR” Output: 1 Explanation: s can be split into “LLLLRRRR”.

Constraints:

2 <= s.length <= 1000 s[i] is either ‘L’ or ‘R’. s is a balanced string.

Pre analysis

The string is guaranteed to be balanced. So, we can blindly iterate and find the subsctring as soon as ‘L’ count is equal to ‘R’ count.

Complexity Analysis

Time complexity: O(N)

Space complexity: O(1)

Another solution

/// without using explict l and r counters
var balancedStringSplit = function (s) {
  let count = 0;
  let balance = 0;
  for (let i = 0; i < s.length; i++) {
    if (s[i] === "L") {
      balance++;
    } else {
      balance--;
    }
    if (balance === 0) {
      count++;
    }
  }
  return count;
};