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.
这是一道经典的可以栈来解决的问题。
核心的思想是,对于string中的每一个字符c。
当栈不为空,且栈顶与字符c匹配,做出栈 ( pop() )。
当栈为空,或 栈顶与c不匹配,字符c入栈。
最后,如果栈为空,说明是一个合法的string;反之则不是。
什么是匹配呢?
当前面是(且 后面出现了),或当前面是[ 后面出现了 ] ,或当前面是{ 后面出现了 }。
运行时间:
代码:
public class ValidParentheses {
public boolean isValid(String s) {
Stack<Character> store = new Stack<>();
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if (store.isEmpty()) {
store.add(c);
} else {
char curTop = store.peek();
if (c == ')' && curTop == '(' || c == ']' && curTop == '[' || c == '}' && curTop == '{') {
store.pop();
} else {
store.push(c);
}
}
}
return store.isEmpty();
}
}