Сложность: medium
Дана строка s, определите, является ли она допустимой. Строка s допустима, если, начиная с пустой строки t = "", вы можете преобразовать t в s, выполнив следующую операцию любое количество раз: вставить строку "abc" в любую позицию в t. Более формально, t становится tleft + "abc" + tright, где t == tleft + tright. Обратите внимание, что tleft и tright могут быть пустыми. Верните true, если s - допустимая строка, иначе верните false.
Пример:
Input: s = "aabcbc"
Output: true
👨💻 Алгоритм:
1⃣Проверка допустимости длины строки:
Проверьте, что длина строки s кратна 3. Если нет, верните false.
2⃣Использование стека для проверки:
Инициализируйте пустой стек. Проходите по каждому символу строки s.
Если текущий символ является 'c', проверьте, что два предыдущих символа в стеке - это 'b' и 'a' соответственно. Если это так, удалите 'b' и 'a' из стека. Если нет, верните false.
Если текущий символ не 'c', добавьте его в стек.
3⃣Проверка остатка стека:
В конце, если стек пуст, верните true. Иначе верните false.
😎 Решение:
class Solution {
isValid(s) {
if (s.length % 3 !== 0) return false;
const stack = [];
for (const char of s) {
if (char === 'c') {
if (stack.length < 2 || stack.pop() !== 'b' || stack.pop() !== 'a') {
return false;
}
} else {
stack.push(char);
}
}
return stack.length === 0;
}
}Ставь 👍 и забирай 📚 Базу знаний