题目描述:
这个题目就是经典的括号匹配问题,括号匹配需要考虑的因素比较多,所以需要用到一个辅助栈;
需要考虑的点:
①如果输入的括号字符串为空,则直接匹配失败,返回false;
②如果输入的括号字符串只有一个字符,也就是只有一般的括号,则也是匹配失败,返回false;
③如果当前扫描到的字符为左括号,则将左括号入栈;如果扫描到的字符为右括号,则需要弹出栈顶元素,判断当前扫描到的字符与栈顶元素是否匹配,如果匹配成功,则继续往下扫描匹配;如果弹出的栈顶元素与当前扫描到的字符不匹配,则直接匹配失败,返回false,不需要继续匹配;
代码实现:
class Solution {
public boolean isValid(String s) {
Stack<Character> stack = new Stack<Character>();
for (int i = 0; i < s.length(); i++) {
if (s.charAt(i) == '(' || s.charAt(i) == '[' || s.charAt(i) == '{') {
stack.push(s.charAt(i));
}
else {
if (stack.isEmpty() || (s.charAt(i) == ')' && stack.pop() != '(') || (s.charAt(i) == ']' && stack.pop() != '[') || (s.charAt(i) == '}' && stack.pop() != '{') ) {
return false;
}
}
}
return stack.isEmpty();
}
}