题目
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.
思路
符号检验这类问题通常用栈来解决。将字符串中的字符从左到右读入,如果是左括号,压入栈内,如果是右括号,从栈顶pop出字符,如果这个字符和读入的右括号配对,继续遍历字符串,否则返回false。这个过程持续进行直到字符串遍历结束,这个时候查看栈是否为空,如果为空,返回true,否则,返回false。
代码
public class Solution {
public boolean isValid(String s) {
Stack stack = new Stack();
if(s == null)
return true;
for(int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if(c == ')' || c == '}' || c == ']') {
if(stack.isEmpty()) {
return false;
}else {
char preC = (Character)stack.pop();
if((c == ')' && preC != '(') || (c == '}' && preC != '{') || (c == ']' && preC != '['))
return false;
}
}else {
stack.push(c);
}
}
return stack.isEmpty() ? true : false;
}
}