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<Character> st = new Stack<Character>();
st.add('*');
这样就可以更加好的防止越界和极限条件。以下是AC代码:
public class Solution {
public boolean isValid(String s) {
Stack<Character> st = new Stack<Character>();
st.add('*');
if(s.length() == 0)
return true;
for(int i = 0; i < s.length(); i++){
char c = s.charAt(i);
if(c == '(' || c == '[' || c == '{'){
st.add(c);
}
else{
if(c == ')'){
char r = st.peek();
if(r != '(' || r == '*')
return false;
else
st.pop();
}
else if(c == ']'){
char r = st.peek();
if(r != '['|| r == '*')
return false;
else
st.pop();
}
else if(c == '}'){
char r = st.peek();
if(r != '{'|| r == '*')
return false;
else
st.pop();
}
}
}//end of loop
if(st.peek() != '*')
return false;
else return true;
}
}