Я недавно столкнулся с этой интересной проблемой. Вам дана строка, содержащая только символы '('
, ')'
, '{'
, '}'
, '['
и ']'
, например, "[{()}]"
, вам нужно написать функцию, которая будет проверять правильность для такой входной строки функция может быть такой:
bool isValid(char* s);
эти скобки должны закрываться в правильном порядке, например, "()"
и "()[]{}"
все действительны, но "(]"
, "([)]"
и "{{{{"
нет!
Я предложил следующее решение для сложности пространства O (n) по времени и O (n), которое прекрасно работает:
- Ведение стека символов.
- Всякий раз, когда вы обнаружите открывающие скобки
'('
, '{'
ИЛИ '['
опустите их в стек.
- Всякий раз, когда вы найдете закрывающие скобки
')'
, '}'
ИЛИ ']'
, проверьте, соответствует ли вершина стека открывающей скобке, если да, то вытолкните стек, иначе разорвите цикл и верните false.
- Повторите шаги 2 - 3 до конца строки.
Это работает, но можем ли мы оптимизировать его для пробела, может быть постоянный дополнительный пробел, я понимаю, что временная сложность не может быть меньше O (n), поскольку мы должны смотреть на каждый символ.
Итак, мой вопрос: можем ли мы решить эту проблему в пространстве O (1)?