给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
写代码时一般也要遵从代码的语法规范,括号不符合规范也会报语法错误,一般会出现以下几种情况:
而且发现如果有括号嵌套时,最内侧的括号是距离最近的(后进先出),最外侧的括号距离是最远的(先进后出),可以联想到这道题目可以用栈来求解。
关于java中的栈Deque是一个双端队列的接口,它的实现类有LinkedList、ArrayDeque、LinkedBlockingDeque,其中比较常用的是LinkedList,这也就是AyyarList会报错的原因。
当Deque作为堆栈时,一般使用push、pop、peek三种方法。

- class Solution {
- public boolean isValid(String s) {
- int len = s.length();
- char ch;
- //Deque
arr = new ArrayList<>(); - Deque
arr = new LinkedList<>(); - for(int i = 0; i < len; i++){
- ch = s.charAt(i);
- if(ch =='('){
- arr.push(')');
- }else if(ch =='['){
- arr.push(']');
- }else if(ch == '{'){
- arr.push('}');
- }else if(arr.isEmpty()){ //在遍历过程中栈为空说明右括号个数多了
- return false;
- }else if(ch == arr.peek()){//栈顶元素与当前元素匹配才可以弹出,也就是说左右元素必须匹配
- arr.pop();
- }else return false;
- }
- return arr.isEmpty();//如果遍历完发现不为空则说明左括号个数多了
- }
- }