leetcode 20

题目描述

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

有效字符串需满足:

左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
每个右括号都有一个对应的相同类型的左括号。

20. 有效的括号 - 力扣(LeetCode)

解题思路

使用栈辅助存储左括号,来进行匹配

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
class Solution {
public boolean isValid(String s) {
if(s.length()%2!=0)return false;
Stack<Character> stack=new Stack();
for(int i=0;i<s.length();i++){
char a=s.charAt(i);
if(a=='{'||a=='['||a=='('){
stack.push(a);
}
else{
if(stack.isEmpty()){
return false;
}
if(a=='}'){
if(stack.pop()!='{'){
return false;
}
}
else if(a==']'){
if(stack.pop()!='['){
return false;
}
}
else if(a==')'){
if(stack.pop()!='('){
return false;
}
}
}
}
if(!stack.isEmpty()){
return false;
}
return true;

}
}

写完通过后,看了别人的解法,可以说是相当简洁

1
2
3
4
5
6
7
8
9
10
11
12
class Solution {
public boolean isValid(String s) {
Stack<Character>stack = new Stack<Character>();
for(char c: s.toCharArray()){
if(c=='(')stack.push(')');
else if(c=='[')stack.push(']');
else if(c=='{')stack.push('}');
else if(stack.isEmpty()||c!=stack.pop())return false;
}
return stack.isEmpty();
}
}

leetcode 20
https://kkkkkong.github.io/posts/39266.html
作者
Kong Weichao
发布于
2023年1月2日
许可协议