欢迎点击「算法与编程之美」↑关注我们!
本文首发于微信公众号:"算法与编程之美",欢迎关注,及时了解更多此系列文章。
问题描述
使用“栈”的方法完成括号匹配(给定一个字符串,判断字符串里的括号是否有效。)
正确匹配情况:(1)[](){} ;(2)([{}])
解决方案
先遍历字符串把三对括号提出来,再利用‘栈’把左括号一个个的放入其中并且遍历到右括号立即进行匹配。匹配成功后删除‘栈’中的左括号并继续,匹配失败则返回‘False’.最后返回栈的长度,避免出现奇数个括号的错误。
注意:不可以把左括号全部放入一个‘栈’,右括号全部放入另一个‘栈’。然后进行匹配。
例如:“([{}])”和“([}{])”左右括号分别放入两个栈的情况都是“([{”和“}])”,但是前一个是正确的,后一个是错误的。
实现代码:
def zhan(s): #新建一个列表,存放括号,出掉非括号的字符 q = [] for i in s: if i == '(' or i == ')' or i == '[' or i == ']' or i == '{' or i == '}' : q.append(i) #利用栈匹配括号 l = [] for i in q: if i == '(' or i == '[' or i == '{': l.append(i) elif i == ')' and l[-1] == '(': l.pop() elif i == ']' and l[-1] == '[': l.pop() elif i == '}' and l[-1] == '{': l.pop() return len(l) == 0 s = "题中字符串" result = zhan(s) print(result) |
END
主 编 | 王文星
责 编 | 周茂林
where2go 团队
微信号:算法与编程之美
长按识别二维码关注我们!
温馨提示:点击页面右下角“写留言”发表评论,期待您的参与!期待您的转发!