echo

任生命穿梭 时间的角落

0%

有效的括号

20. 有效的括号

给定一个只包括 '('')''{''}''['']' 的字符串,判断字符串是否有效。

有效字符串需满足:

  1. 左括号必须用相同类型的右括号闭合。
  2. 左括号必须以正确的顺序闭合。

注意空字符串可被认为是有效字符串。

使用栈的经典题目,我们将所有的左括号入栈,当遇到右括号时,如果栈为空或者栈顶元素不能与当前括号匹配,返回false。遍历到最后,如果栈为空则 返回 true。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class Solution {
public boolean isValid(String s) {
Deque<Character> stack = new ArrayDeque<>();
for(int i = 0; i < s.length(); i++){
char c = s.charAt(i);
if(c == '(' || c == '[' || c == '{'){
stack.push(c);
}else if(c == ')'){
if(stack.size() == 0 || stack.pop() != '(') return false;
}else if(c == ']'){
if(stack.size() == 0 || stack.pop() != '[') return false;
}else{
if(stack.size() == 0 || stack.pop() != '{') return false;
}
}
return stack.isEmpty();
}
}

时间复杂度O(n),空间复杂度O(n)。