В этой задаче Leetcode нас просят разбить строку, содержащую одинаковое количество «L» и «R» (и только эти символы), на максимальное количество подстрок с этим свойством, а затем вернуть максимальное количество разбиений, которые осуществимо.

Например, RLRRLLLRLR можно разделить на RL, RRLL, LR и LR, и тогда мы должны вернуть 4.

Идея состоит в том, чтобы найти минимальную подстроку Sleft из S так, чтобы S = Sleft + Sright с Sleft были сбалансированы. Прямым следствием является то, что правая сторона S уравновешена, и мы можем продолжить поиск дополнительных расщеплений в Sright.

На практике это означает, что нам нужно только подсчитать количество встреченных L и R и добавить 1 к количеству разбиений каждый раз, когда эти числа равны при повторении через S.

Решение:

class Solution {
    public int balancedStringSplit(String s) {
        int res = 0;
        int counter = 0;
        for (int i = 0; i < s.length(); i++) {
            if (s.charAt(i) == 'L') {
                counter++;
            } else {
                counter--;
            }
            if (counter == 0) {
                res++;
            }
        }
        return res;
    }
}