题目
给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
- 每个右括号都有一个对应的相同类型的左括号。
示例 1:
输入: s = "()"
输出: true
题解
方式一:栈
复杂度:O(n) 遍历字符串
public boolean isValid(String s) {
// 用双端队列实现栈功能
Deque<Character> deque = new LinkedList<>();
for (char c: s.toCharArray()) {
if (c == '(' || c == '[' || c == '{') {
// 左括号入栈
deque.addLast(c);
} else {
if (deque.isEmpty()) return false;
// 取出栈顶左括号
char cc = deque.pollLast();
if ((c == ')' && cc != '(') || (c == ']' && cc != '[') || (c == '}' && cc != '{')) {
// 不匹配
return false;
}
}
}
return deque.isEmpty();
}
总结
数据结构:栈