No.20 有效的括号
题目:
给定一个只包括 '('
,')'
,'{'
,'}'
,'['
,']'
的字符串,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
示例 1:
输入: "()"输出: true
示例 2:
输入: "()[]{}"输出: true
示例 3:
输入: "(]"输出: false
思路分析:我们得知道有效括号的特点 ,肯定都是左括号在一起 ,之后才是右括号 ,而且左右数量等同 ,从中间看来是严格对称的 ,所以最简单的思路就是从中间位置向两端对比 。这里采用另外的方法来实现判断 。
思路一 :利用python种的replace函数将成对的可匹配括号用空字符代替 ,之后依次进行 ,若是有效的括号 ,必然经过有限次循环后 ,字符串为空 ,则最后判断字符串是否为空即可。思路简单 ,实现也很容易 :
思路二 :除了利用python的replace函数 ,我们知道数据结构种有一个栈的概念 ,对的 ,思路二就是利用栈的思路解决这一个问题 。其实质和思路一异曲同工 ,只不过不需要python的replace函数 ,也就是说其他语言也可以 ,具有普适性 。具体做法和思路一类似 ,即在 append 所有左括号后 ,再依次判断右括号和其左侧一个左括号是否匹配 ,若匹配则将刚 append 进 stack 的左括号 pop 出 ,如果为有效括号 ,最后所有的左括号都会从 stack 中 pop 出 ,即最后通过判断 stack 是否长度为 0 即可 。
代码上传到小詹的GitHub了 ,链接为 :https://github.com/Jan1995/LeetCode