给定一个只包括 ‘(‘,’)’,’{‘,’}’,’[‘,’]’ 的字符串,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
示例 1:
输入: “()”
输出: true
示例 2:
输入: “()[]{}”
输出: true
示例 3:
输入: “(]”
输出: false
示例 4:
输入: “([)]”
输出: false
示例 5:
输入: “{[]}”
输出: true
题意分析:
判断一个括号字符串是否合法,在这道题中需要满足:
- 每个左括号都需要有一个对应的右括号与其对应
- 在一对合法括号里面的括号,也需要是合法的(见示例4,5)
思路分析:
leetcode之后还会有很多这种判断括号合法的问题,这种题目通常都是使用栈
来解决的。
基本思路为:左括号来了就进栈,右括号来了就看栈顶元素是否匹配,匹配就出栈,继续分析下一个括号,最后观察栈是否为空(确保没有多余的左括号!)
而这道题需要做一点小小的改动,那就是右括号来的时候,我们需要判断站定的元素是否为对应括号的左括号(因为这里有三种括号类型),用一个字典存了每个右括号对应的左括号,这样就可以少写一点if条件了。
1 | # 24ms, beats 79.66% |