20 有效的括号
一、题目
给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
- 每个右括号都有一个对应的相同类型的左括号。

二、题解
遇到左括号时,直接将对应的右括号压入栈中;遇到右括号时,只需判断它是否与栈顶元素相等即可。
import java.util.Stack;
class Solution {
public boolean isValid(String s) {
// 如果字符串长度为奇数,肯定无法完全匹配,提前返回
if (s.length() % 2 != 0) {
return false;
}
Stack<Character> stack = new Stack<>();
// 遍历字符串中的每一个字符
for (char c : s.toCharArray()) {
// 遇到左括号,就把相应的右括号压入栈中
if (c == '(') {
stack.push(')');
} else if (c == '{') {
stack.push('}');
} else if (c == '[') {
stack.push(']');
}
// 遇到右括号时,进行匹配判断
else {
// 如果栈为空(说明没有多余的左括号来匹配当前的右括号)
// 或者栈顶弹出的括号与当前右括号不匹配
if (stack.isEmpty() || stack.pop() != c) {
return false;
}
}
}
// 遍历结束后,如果栈为空,说明所有括号都成功匹配;否则说明有未匹配的左括号
return stack.isEmpty();
}
}
时间复杂度:
空间复杂度:
评论