Используйте стек открывающих скобок: каждая закрывающая должна соответствовать последней открытой. В конце стек должен быть пуст.
Дана строка, содержащая символы (){}.
Используйте стек открывающих скобок: каждая закрывающая должна соответствовать последней открытой. В конце стек должен быть пуст.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Дана строка, содержащая символы (){}.
Нужно определить, является ли входная строка сбалансированной с точки зрения скобок.
Ответ
Используйте стек открывающих скобок: каждая закрывающая должна соответствовать последней открытой. В конце стек должен быть пуст.
func isBalanced(s string) bool {
stack := make([]rune, 0)
for _, r := range s {
switch r {
case '(', '{':
stack = append(stack, r)
case ')', '}':
if len(stack) == 0 { return false }
open := stack[len(stack)-1]
if (r == ')' && open != '(') || (r == '}' && open != '{') {
return false
}
stack = stack[:len(stack)-1]
default:
return false
}
}
return len(stack) == 0
}
Пустая строка сбалансирована. Посторонние символы здесь отклоняются согласно алфавиту условия; если их нужно игнорировать, изменяется default. Время O(n), память O(n) в худшем случае.