Если вы, ребята, помните, пару дней назад я кратко говорил о структуре данных стека, противоположностью стека была бы очередь. Очередь на самом деле очень похожа на стек, но вместо того, чтобы последняя запись в стеке была последней, первая запись в очереди будет первой. Например, если вы создаете приложение, которое ведет учет списка ожидания пациентов больницы, было бы логично, чтобы первый человек в очереди получил доступ в больницу первым. Временная сложность также аналогична: для добавления и удаления из очереди потребуется 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; };
Надеюсь, вы, ребята, узнали что-то новое, прочитав это! Дайте мне знать, если у вас есть вопросы или комментарии ниже, спасибо.