描述:
给定一个字符串所表示的括号序列,包含以下字符: '(', ')'
, '{'
, '}'
, '['
and ']'
, 判定是否是有效的括号序列。
括号必须依照 "()"
顺序表示, "()[]{}"
是有效的括号,但 "([)]"
则是无效的括号。
样例1:
输入:"([)]"
输出:False
样例2:
输入:"()[]{}"
输出:True
代码:
public boolean isValidParentheses(String s) {
// write your code here
if(s==null||s.length()==0||s.length()%2!=0){
return false;
}
Stack<Character> stack=new Stack<Character>();
boolean flag=true;
for(int i=0;i<s.length();i++){
if(s.charAt(i)=='('||s.charAt(i)=='['||s.charAt(i)=='{'){
stack.push(s.charAt(i));
}else if(s.charAt(i)==')'){
if(!stack.empty()&&stack.peek()=='('){//peek()返回栈顶值,但不删除栈顶值
stack.pop();
}else{
flag=false;
break;
}
}
else if(s.charAt(i)==']'){
if(!stack.empty()&&stack.peek()=='['){//peek()返回栈顶值,但不删除栈顶值
stack.pop();
}else{
flag=false;
break;
}
}
else if(s.charAt(i)=='}'){
if(!stack.empty()&&stack.peek()=='{'){//peek()返回栈顶值,但不删除栈顶值
stack.pop();
}else{
flag=false;
break;
}
}
}
if(!stack.empty()){
flag=false;
}
return flag;
}
补充说明:
首先定义一个装载char类型数据的栈。判断字符串是否为空,字符串字符个数是否为单数,若为空或单数,则直接返回false。
从s的第一个字符开始遍历,若遇到"(","[","{",则压入栈中,若遇到")","]","}",则判断是否匹配,不匹配则直接跳出循环。
若完全匹配,则最后stack必定为空,返回true。若不为空,则返回false。