对于括号匹配问题,使用栈是比较方便的做法。利用栈维护左边括号,遇到右边括号则与栈顶元素比较,为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(); } }