Итак, я изучаю структуры данных и алгоритмы, которые в настоящее время работают со стеками, очередями и декеусами
У меня есть этот вопрос, в котором говорится, что я должен реализовать стек, чтобы проверить, имеет ли данная строка сбалансированные скобки, и мне сказали в вопросе, что строка содержит круглые скобки only
, а строка имеет no spaces
Итак, я реализовал свой класс Stack, а затем попытался решить проблему Checking if the Parenthesis balance
и выполнил простой тестовый пример '[]'
и он возвращает False вместо True
, поэтому я не могу обнаружить ошибку в коде.
Ниже представлен мой мыслительный процесс по решению вопроса, чтобы вы могли ясно увидеть, где я мог ошибиться:
Сначала я проверил, равна ли длина строки, даже если не верну False
Я просматриваю строку и каждый раз, когда я вижу открывающую скобку, я отправляю sh ее в стек
Затем, когда я вижу закрывающую скобку, я использую знания стеков, которые LIFO я знаю, что я f теперь я вижу закрывающую скобку, предыдущая должна быть соответствующим открытием, которое было последним элементом, помещенным в стек, поэтому я затем извлекаю его из стека и сохраняю в переменной
Затем я проверяю, соответствуют ли они, и если они не соответствуют, я возвращаю False
Затем я проверяю, пуст ли стек, тогда я знаю, что нет соответствующей открывающей скобки, которую я возвращаю False
Наконец, если l oop закончился без какого-либо возврата, я проверяю, пуст ли стек, я возвращаю True
иначе I False
Код ниже
class Stack(object):
def __init__(self):
self.items = []
def isEmpty(self):
return self.items == 0
def get_size(self):
return len(self.items)
def push(self, data):
self.items.append(data)
def peek(self):
return self.items[len(self)-1]
def remove_item(self):
self.items.pop()
stack = Stack()
def balance_check(s):
if len(s) % 3 == 0:
return False
openings = set('({[')
matches = set([ ('{', '}') , ('(', ')') , ('[', ']') ])
for paren in s:
if paren in openings:
stack.push(paren)
else:
if stack.get_size() == 0:
return False
last_open = stack.remove_item()
if (last_open, paren) not in matches:
return False
if stack.get_size() == 0:
return True
print(balance_check('[]'))