Если вы, ребята, помните, пару дней назад я кратко говорил о структуре данных стека, противоположностью стека была бы очередь. Очередь на самом деле очень похожа на стек, но вместо того, чтобы последняя запись в стеке была последней, первая запись в очереди будет первой. Например, если вы создаете приложение, которое ведет учет списка ожидания пациентов больницы, было бы логично, чтобы первый человек в очереди получил доступ в больницу первым. Временная сложность также аналогична: для добавления и удаления из очереди потребуется O(1)операций. Эта структура данных намного проще, чем бинарное дерево поиска, о котором я говорил вчера. Дайте мне знать, если у вас есть какие-либо вопросы об очередях!

Для сегодняшнего вопроса об алгоритме мне нужно создать функцию, которая возвращает количество подстрок букв R и L. Чтобы подстрока была действительной, в ней должно быть одинаковое количество букв R и L. Вот пример:

let string1 = "LLRRLRRLLR";
// function returns
4 as LLRR, LR, RL, LR are valid substrings

Итак, я начал с создания двух переменных, каждая из которых будет подсчитывать количество R и L внутри входной строки. Для каждой итерации, если переменные имеют одинаковое значение, они обе обнуляются, и каждый раз увеличивается отдельный счетчик. Вот код:

var balancedStringSplit = function(s) {
     let counter = 0, 
        r = 0, 
        l = 0;
    
    for (let i = 0; i < s.length; i++) {
        if (s[i] === 'R') r++;
        if (s[i] === 'L') l++;
        if (r === l) {
            r = l = 0;
            counter += 1;
        }
    }
    return counter;
};

Надеюсь, вы, ребята, узнали что-то новое, прочитав это! Дайте мне знать, если у вас есть вопросы или комментарии ниже, спасибо.