20有效的括号

下面是题目

下面是题目给出的代码

1
2
3
4
5
6
class Solution {
public:
bool isValid(string s) {

}
};

我第一时间觉得既然(){} []需要相互配对,为什么不用map存储呢?

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
//经过几次修改后,时间空间100%
class Solution {
public:
bool isValid(string s) {
map<char,char>m;
m.insert(pair<char,char>('[',']'));
m.insert(pair<char,char>('(',')'));
m.insert(pair<char,char>('{','}'));
stack<char>a;
for(char n : s)
{
//如果是左半部分的括号的话,那么我们先把它入栈
if(n=='{'||n=='['||n=='(')
a.push(n);
//如果是右半部分的括号,先别着急,我们还要判断栈里面是不是有元素
else if (n=='}'||n==']'||n==')') {
//有元素而且匹配上了,那么才能出栈
if (!a.empty()&&n==m[a.top()])
{
a.pop();
}
//任何一个条件不满足的话,就直接返回false
else
return false;
}
}
//最后判断是否非空,如果栈内还有元素,说明false,要不然说明都对齐消除了
return !a.empty()? false:true;
}
};
-------------本文结束,感谢您的阅读-------------