题目
给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
题解
利用栈先进后出的思想,遍历输入的字符串,遇到左括号则push进栈,遇到右括号则查询是否与当前栈顶的左括号匹配,若匹配则将栈顶左括号pop出栈,并继续往下遍历,否则字符串为无效,返回false。可建立一个哈希表存放对应的括号对。
代码
class Solution {
public boolean isValid(String s) {
if (s.length()%2 != 0) return false;
Map<Character, Character> bracketMap = new HashMap<Character, Character>();
bracketMap.put(')', '(');
bracketMap.put(']', '[');
bracketMap.put('}', '{');
Stack<Character> stack = new Stack<Character>();
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if (c == '(' || c == '[' || c == '{') {
stack.push(c);
} else if (c == ')' || c == ']' || c == '}') {
if (stack.empty()) return false;
if (bracketMap.get(c) == stack.peek()) {
stack.pop();
continue;
} else return false;
}
}
return stack.isEmpty();
}
}