20. 有效的括号

Problem: 20. 有效的括号

解析

栈做法

将结果存入栈中,遇到右括号就和栈顶元素比较,如果匹配就弹出栈顶元素,否则就入栈,最后判断栈是否为空。

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
38
39
40
41
42
43
44
45
46
//! n,n->遍历一次字符串,栈的最大空间为n
class Solution {
public:
bool isValid(string s) {
stack<char> st;
for (int i = 0; i < s.length(); ++i) {
if (s[i] == '(' || s[i] == '[' || s[i] == '{') {
st.push(s[i]);
} else {
if(st.empty()){
return false;
}
switch (s[i]) {
case ')':
if (st.top() == '(') {
st.pop();
} else {
return false;
}
break;
case ']':
if (st.top() == '[') {
st.pop();
} else {
return false;
}
break;
case '}':
if (st.top() == '{') {
st.pop();
} else {
return false;
}
break;
default:
return false;
break;
}
}
}
if (st.empty()) {
return true;
}
return false;
}
};