Сложность: 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 {
func isValid(_ s: String) -> Bool {
if s.count % 3 != 0 {
return false
}
var stack = [Character]()
for char in s {
if char == "c" {
if stack.count < 2 || stack.last! != "b" {
return false
}
stack.removeLast()
if stack.last! != "a" {
return false
}
stack.removeLast()
} else {
stack.append(char)
}
}
return stack.isEmpty
}
}Ставь 👍 и забирай 📚 Базу знаний