对于括号匹配问题,使用栈是比较方便的做法。利用栈维护左边括号,遇到右边括号则与栈顶元素比较,为false直接返回,为true在比较下一个右括号,直到遍历完成。
在代码中;
 stack.peek()方法使用的时候,首先要判断stack.isEmpty() ,如果栈为空去使用peek方***产生空指针异常。
import java.util.*;


public class Solution {
    /**
     * 
     * @param s string字符串 
     * @return bool布尔型
     */
    public boolean isValid (String s) {
        // write code here
        Stack<Character> stack=new Stack<>();
        char[] sArr=s.toCharArray();
        for(int i=0;i<sArr.length;i++){
            if(sArr[i]=='('||sArr[i]=='['||sArr[i]=='{'){
                stack.push(sArr[i]);
            }else if(sArr[i]==')'&& !stack.isEmpty() && stack.peek()=='('){
                stack.pop();
            }else if(sArr[i]==']'&& !stack.isEmpty() && stack.peek()=='['){
                stack.pop();
            }else if(sArr[i]=='}'&& !stack.isEmpty() && stack.peek()=='{'){
                stack.pop();
            }else{
                return false;
            }
        }
        return stack.isEmpty();
    }
}