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.
这题只要求括号是合法的。用一个stack,遇到左括号就丢到stack里,遇到右括号就弹出stack顶上的括号,看看是不是一对。是的话就继续,不是的话返回false。扫描完一遍以后,stack如果不是空的,说明左括号多了,返回false。
public class Solution {
public boolean isValid(String s) {
//this stack stores all the left parentheses
Stack<Character> stack = new Stack<Character>();
for(int i = 0; i < s.length(); i++){
char current = s.charAt(i);
//if the next character is a right par
if(isLeft(current) == false){
if(stack.isEmpty()){
return false;
}
//check the top par on the stack if it formsa pair with the current par
char top = stack.pop();
if(isPair(top, current) == false){
return false;
}
}
//if the next character is a left par, push onto the stack
else{
stack.push(current);
}
}
if(stack.isEmpty() == false)
return false;
return true;
}
public boolean isLeft(char c){
if(c == '[' || c == '{' || c == '(')
return true;
else
return false;
}
public boolean isPair(char left, char right){
if(left == '(' && right == ')')
return true;
if(left == '[' && right == ']')
return true;
if(left == '{' && right == '}')
return true;
return false;
}
}