Leetcode面试经典150题-20.有效的括号
给定一个只包括 '('
,')'
,'{'
,'}'
,'['
,']'
的字符串 s
,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
- 每个右括号都有一个对应的相同类型的左括号。
示例 1:
输入:s = "()"
输出:true
示例 2:
输入:s = "()[]{}"
输出:true
示例 3:
输入:s = "(]"
输出:false
示例 4:
输入:s = "([])"
输出:true
提示:
1 <= s.length <= 104
s
仅由括号'()[]{}'
组成
这个题是非常基础的栈的使用,其他的就不多说了,上代码,看不懂的请留言或者私信,收到第一时间解答
class Solution {/**非常简单的题,整体思想就是用个栈,如果是左括号就入栈,如果是右括号就弹出如果弹出的不是自己对应的左括号,直接失败如果最后栈为空就是成功,如果不是空就是失败了 */public boolean isValid(String s) {/**不是2的整数倍,不可能是有效的 */if(s.length() % 2 == 1) {return false;}/**转成字符数组*/char[] sArr = s.toCharArray();/**定义栈*/Stack<Character> stack = new Stack<>();for(char c : sArr) {if(c == '(' || c == '[' ||c == '{') {/**如果是左括号放入对应的右括号,这样右括号的时候直接判断是否相等就行了 */stack.push(c == '('?')':c == '['?']' : '}');} else {/**栈为空肯定找不到对应的,如果弹出来的不对应也匹配不上 */if(stack.isEmpty() || stack.pop() != c) {return false;} }}/**配对即弹出,如果最后弹空了,说明都对上了 */return stack.isEmpty();}
}