Python栈practise(一)
文中代码多引用自:《Python数据结构与算法分析》-布拉德利·米勒,戴维·拉努姆
括号匹配
- 简单括号匹配
#仅检验含小括号的
from pythonds.basic import Stack
def parChecker(symbolString):
s=Stack()
balanced=True
index=0
while index<len(symbolString) and balanced:
if symbolString[index]=='(':
s.push(symbolString[index])
else:
if s.isEmpty():#易漏
balanced=False
else:
s.pop()
index+=1
return balanced==True and s.isEmpty()
str=input()
if parChecker(str):
print('true')
else:
print('false')
- 一般情况
from pythonds.basic import Stack
def parChecker(symbolString):
index=0
balanced=True
s=Stack()
while index<len(symbolString) and balanced==True:
if symbolString[index] in '([{':
s.push(symbolString[index])
else:
if s.isEmpty():
balanced=False
else:
if not matches(s.pop(),symbolString[index]):
balanced=False
index+=1
return balanced and s.isEmpty()
def matches(top,symbol):
tops='([{'
symbols=')]}'
return tops.index(top)==symbols.index(symbol)
if parChecker(input()):
print('true')
else:
print('false')
ps:关于括号匹配在力扣上发现了一个大佬的做法(太厉害了!!!)
给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
示例 1:
输入:s = "()"
输出:true
示例 2:
输入:s = "()[]{}"
输出:true
示例 3:
输入:s = "(]"
输出:false
示例 4:
输入:s = "([)]"
输出:false
示例 5:
输入:s = "{[]}"
输出:true
提示:
1 <= s.length <= 104
s 仅由括号 '()[]{}' 组成
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/valid-parentheses
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
s=input()
while '{}' in s or '[]' in s or '()' in s:
s=s.replace('{}','')
s=s.replace('()','')
s=s.replace('[]','')
if s=='':
print('true')
else:
print('false')
代码引用:https://leetcode.cn/problems/valid-parentheses/comments/ -代码改编自评论区wings大佬的评论