Python栈practise(一)

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大佬的评论

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值