20. 有效的括号
给定一个只包括 '('
,')'
,'{'
,'}'
,'['
,']'
的字符串,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
示例 1:
输入: "()"
输出: true
示例 2:
输入: "()[]{}"
输出: true
示例 3:
输入: "(]"
输出: false
示例 4:
输入: "([)]"
输出: false
示例 5:
输入: "{[]}"
输出: true
方法1:栈
算法思路:
利用栈 “先进后出” 的特性,遍历输入字符串每个字符,判断当前为 ( { [
为右边符号,则左边符号进行入栈。继续遍历则出栈进行判断。最后栈为空则为有效字符串。
参考代码:
class Solution {
// 栈
public boolean isValid(String s) {
if (s == null || s.length() == 0) {
return true;
}
Stack<Character> stack = new Stack<>();
for (char ch : s.toCharArray()) {
if (ch == '(') stack.push(')');
else if (ch == '{') stack.push('}');
else if (ch == '[') stack.push(']');
else if (stack.isEmpty() || ch != stack.pop()) return false;
}
return stack.isEmpty();
}
}
复杂度分析:
- 时间复杂度: O ( n ) O(n) O(n), n n n 为字符串的长度。
- 空间复杂度: O ( n ) O(n) O(n), n n n 为栈使用的空间。