Валидные скобки
Дана строка s
, состоящая из следующих символов: '(', ')', '{', '}', '[' и ']'.
Строка s
является валидной, если:
- Каждая открытая скобка закрыта скобкой того же типа.
- Открытые скобки закрыты в правильном порядке.
- Каждая закрытая скобка имеет соответствующую открытую скобку того же типа.
Верните true
, если строка s
валидна, и false
в противном случае.
Пример 1:
Input: s = "()" Output: true <br> **Пример 2:** ```java Input: s = "()[]{}" Output: true
Пример 3:
Input: s = "(]" Output: false
Рекомендуемая временная и пространственная сложность
Вам следует стремиться к решению с временной сложностью O(n)
и пространственной сложностью O(n)
, где n
— длина входной строки.
Подсказка 1
Решение грубой силы заключалось бы в проверке каждой скобки по отношению к каждой другой скобке в строке. Это было бы решение с временной сложностью O(n^2)
. Можете ли вы придумать более эффективный способ?
Подсказка 2
Можно ли использовать структуру данных, которая позволяет эффективно проверять, является ли скобка закрывающей и соответствует ли она последней открытой скобке?
Подсказка 3
Мы можем использовать стек для хранения открытых скобок. Когда мы встречаем закрывающую скобку, мы проверяем, соответствует ли она последней открытой скобке в стеке.