给定一个字符串所表示的括号序列,包含以下字符: '(', ')'
, '{'
, '}'
, '['
and ']'
, 判定是否是有效的括号序列。
样例
括号必须依照 "()"
顺序表示, "()[]{}"
是有效的括号,但 "([)]"
则是无效的括号。
此题主要的思想是用栈来作为存储数据结构,我们将')'、‘}’、‘]’视为右括号,当遇到右括号时查看当前栈顶是否为与之对应的左括号,如果是,则将栈顶元素弹出,继续对比,如果不是与之对应的左括号,则退出返回false。
代码如下:
public static boolean isValidParentheses(String s) {
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() == '('){
stack.pop();
}else{
flag = false;
break;
}
}else if(s.charAt(i) == '}'){
if(!stack.empty() && stack.peek() == '{'){
stack.pop();
}else{
flag = false;
break;
}
}else if(s.charAt(i) == ']'){
if(!stack.empty() && stack.peek() == '['){
stack.pop();
}else{
flag = false;
break;
}
}
}
if(!stack.empty()){
flag = false;
}
return flag;
}