题目描述: (1)给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。 (2)有效字符串需满足:左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 (3) 注意空字符串可被认为是有效字符串。
时间: 2023-11-11 12:03:37 浏览: 129
这是一道典型的用栈来解决的问题。我们可以遍历字符串,当遇到左括号时,将其压入栈中;当遇到右括号时,判断栈顶是否为相应的左括号,如果是则弹出栈顶元素,否则返回 false。最后,如果栈为空,则说明所有左括号都有相应的右括号与之匹配,返回 true;否则,说明有未匹配的左括号,返回 false。
以下是具体的实现代码(Java):
```java
public boolean isValid(String s) {
if (s == null || s.length() == 0) {
return true;
}
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 (stack.isEmpty()) {
return false;
}
char top = stack.pop();
if ((c == ')' && top != '(') || (c == ']' && top != '[') || (c == '}' && top != '{')) {
return false;
}
}
}
return stack.isEmpty();
}
```
时间复杂度为 O(n),空间复杂度为 O(n)。
阅读全文