给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 每个右括号都有一个对应的相同类型的左括号。
时间: 2023-12-10 18:02:46 浏览: 138
这道题可以使用栈来解决。从左到右遍历字符串,如果遇到左括号,就将其推入栈中;如果遇到右括号,就将栈顶元素弹出,并判断是否匹配。如果不匹配则直接返回 false,如果遍历结束后栈不为空,则说明有左括号没有被匹配到,也返回 false。
以下是代码实现:
```java
class Solution {
public boolean isValid(String s) {
if (s == null || s.length() % 2 != 0) {
return false;
}
Stack<Character> stack = new Stack<>();
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if (c == '(' || c == '{' || c == '[') {
stack.push(c);
} else {
if (stack.isEmpty()) {
return false;
}
char top = stack.pop();
if ((c == ')' && top != '(') || (c == '}' && top != '{') || (c == ']' && top != '[')) {
return false;
}
}
}
return stack.isEmpty();
}
}
```
时间复杂度为 O(n),空间复杂度为 O(n)。
阅读全文