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.
这道题用到了栈,遍历字符串,将所有左括号压入栈中,这里有个重要的点,那就是右括号总是与离他最近的左括号配对,
所以接下来找到右括号之后,直接查询栈顶,如果配对则推出,不配对则不做操作,最后判断栈是否为空,也就是全部配对
成功,来判断最终结果。
代码:
public class Solution {
public boolean isValid(String s) {
boolean result = true;
if(s.length() % 2 != 0){
return false;
}
Stack a = new Stack();
char[] b = s.toCharArray();
for(int i = 0; i < s.length();i++){//全部压入栈中
if(b[i] == '(' || b[i] == '{' || b[i] == '['){
a.push(b[i]);
}
if(b[i] == ')' || b[i] == '}' || b[i] == ']' ){
if(a.empty()){
result = false;
}else{
if(((char)a.peek() + 1 == b[i]) || ((char)a.peek() + 2 == b[i])){
a.pop();
}
}
}
}
if(a.empty()){
result = true;
}else{
result = false;
}
return result;
}
}