用python语言,通过栈来实现符号匹配注意事项:
1、通过列表的append()和pop()方法来实现进栈和出栈操作
2、注意判断列表栈为空的情况
首先,从小括号()匹配开始距离:
def parCharge(symbolString):
# 用列表来实现栈
s = []
for i in range(len(symbolString)):
# 对字符串中的每个字符进行处理
symbol = symbolString[i]
# 首先判断是不是左括号
# 是左括号的话入栈
if symbol == '(':
s.append(symbol)
# 是右括号的话,分情况判断
else:
# 是右括号并且此时栈为空(没有左括号与之匹配,则返回false)
if len(s) == 0:
return False
# 是右括号,栈不为空,则出栈操作
else:
s.pop()
# 循环结束,判断栈是否为空,不为空的话返回False
if len(s) == 0:
return True
else:
return False
# 测试用例
result = parCharge('(()))')
print(result)
通过以上举例发现符号匹配的通用步骤:
**
1、将符号字符传中的字符挨个取出
2、判断该字符是否为左括号,是的话入栈
3、该字符为右括号时,注意判断此时栈是否为空,如果为空,直接返回False,不为空的话才进行匹配操作
4、循环结束后,对栈是否为空进行判断,如果不为空(还有左括号剩余),则返回False或则返回True
根据以上案例,进行多符号()[]{}匹配操作。
# 用列表来实现栈的操作
# 符号匹配问题
dict1 = {'(': ')', '[': ']', '{': '}'}
def parChecker(symbolString):
s = []
for i in range(len(symbolString)):
symbol = symbolString[i]
# 如果是左括号,入栈
if symbol in dict1.keys():
s.append(symbol)
# 不是左括号
# 是右括号而且此时栈已经为空 结束循环
else:
if len(s) == 0:
return False
else:
# 右括号且不为空,进行匹配操作
r1 = s.pop()
if dict1[r1] != symbol:
return False
# 全部循环结束 如果s是空的
if len(s) == 0:
return True
else:
return False
s1 = '[][]{}(%'
result = parChecker(s1)
print(result)
多括号匹配问题:
1、首先将符号对应关系存储到字典中
2、与小括号匹配步骤相同,取出字符串字符,看其是否为左括号,是的话入栈
2、若是右括号,先判断此时栈是否为空,是空返回False,不是,将栈顶值取出作为字典的关键字(左括号),看该字典与之对应的符号是当前的右括号,如果不是,返回False
3、循环结束,判断栈是否为空(是否残留左括号),为空就返回True,不为空则返回False。