原题链接:
https://leetcode.com/problems/valid-parentheses/description/
思路:
括号匹配问题,之前在严蔚敏的数据结构那本书里见到过,C语言版在49页。思路是,将输入的字符串中的每一个符号c1和栈顶符号c2比较,看是否匹配(比如"()"就是匹配,")("或者"({"就是不匹配),如果不匹配,将c1入栈,如果匹配了,将c2出栈。栈顶为空的时候,取栈顶元素来进行匹配比较的话会抛一个空栈异常,所以这种情况下直接将c1入栈即可。那么到最后,如果输入的一串括号是合理的,必然栈最后是空的,如果栈里不为空,那就是还有括号没匹配上留在栈里了。
public class ValidParentheses {
public boolean isValid(String s) {
Stack<Character> stack = new Stack<Character>();
for(char c: s.toCharArray()) {
if(stack.isEmpty() || !isMatchedBrackets(stack.peek(), c)) {
stack.push(c);
} else {
stack.pop();
}
}
return (stack.isEmpty());
}
private boolean isMatchedBrackets(char c1, char c2) {
if(c1 == '(' && c2 == ')')
return true;
if(c1 == '{' && c2 == '}')
return true;
if(c1 == '[' && c2 == ']')
return true;
return false;
}
}