利用栈实现括号匹配(python语言)

原理:

  1. 右括号总是与最近的左括号匹配 --- 栈的后进先出
  2. 从左往右遍历字符串,遇到左括号就入栈,遇到右括号时,就出栈一个元素与其配对
  3. 当栈为空时,遇到右括号,则此右括号无与之匹配的左括号
  4. 当最终右括号匹配完毕后栈内还有剩余元素,则表明这些位置的左括号没有与之匹配的右括号

代码实现:

 1 # 1、创建一个Stack的类
 2 # 对栈进行初始化参数设计
 3 class Stack(object):
 4     def __init__(self,limit=10):
 5         self.stack = [] # 存放元素
 6         self.limit = limit # 栈容量极限
 7 
 8     # 进栈
 9     def push(self,data):
10         # 判断栈是否溢出
11         if len(self.stack) >= self.limit:
12             raise IndexError('超出栈容量极限')
13         self.stack.append(data)
14 
15     # 退栈
16     def pop(self):
17         if self.stack:
18             return self.stack.pop()
19         else:
20             # 空栈不能被弹出元素
21             raise IndexError('pop from an empty stack')
22 
23     def peek(self):
24         # 查看栈的栈顶元素(最上面的元素)
25         if self.stack:
26             return self.stack[-1]
27 
28     # 判断栈是否为空
29     def is_empty(self):
30         return not bool(self.stack)
31 
32     def size(self):
33         # 返回栈的大小
34         return len(self.stack)
35 
36 # 括号匹配  parenthesis 圆括号  parentheses:parenthesis的复数
37 def balanced_parentheses(parentheses):
38     stack = Stack(len(parentheses))
39     for parenthesis in parentheses:
40         # 如果是左括号,则入栈
41         if parenthesis == '(':
42             stack.push(parenthesis)
43         elif parenthesis == ')':
44             # 当栈为空时,遇到右括号,则此右括号无与之匹配的左括号
45             if stack.is_empty():
46                 return False
47             stack.pop()
48     # 栈为空,返回 True
49     # 栈不为空,返回 False
50     return stack.is_empty()
51 
52 if __name__ == '__main__':
53     examples = ['((()))','((())','(()))']
54     for example in examples:
55         print(example + ':' + str(balanced_parentheses(example)))

猜你喜欢

转载自www.cnblogs.com/pjcd-32718195/p/12387699.html
今日推荐