Given a string containing just the characters '(', ')', '{', '}', '[' and ']', determine if the input string is valid.
The brackets must close in the correct order, "()" and "()[]{}" are all valid but "(]" and "([)]" are not.
题目目标:进行三类括号的匹配,即可以理解为在一种超长的运算式中括号加的对不对。对:每一个右括号都有唯一确定的左括号和他匹配。
题目思路:做过超级计算器的同学都知道这类括号匹配问题要用栈(先进后出)来处理吧,没啥可说的上代码。
import java.util.Stack; public class Solution { public boolean isValid(String s) { Stack<Character> identifyorder=new Stack<Character>(); char[] array=s.toCharArray(); for(int i=0;i<array.length;i++){ char visit=array[i],tofit='*'; switch(visit){ //当扫到右括号时,生成其对应的左括号,常事与栈顶元素匹配。成功:弹出栈顶左括号;失败入栈。 case ')':tofit='(';break; case ']':tofit='[';break; case '}':tofit='{';break; default:tofit='*'; } if(!identifyorder.empty()&&tofit==identifyorder.peek()){ identifyorder.pop(); }else{ identifyorder.add(visit); } } if(identifyorder.empty())return true; //扫描完成,栈空则,串的括号全部正确匹配;否则,匹配出错 else return false; } }