抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

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


思路

  • 用栈暂存左括号;用 map 键值对存储左括号和右括号的对应关系。

学习点

  • 栈、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
31
32
33
34
35
36
37
class Solution {
public:
bool isValid(string s) {
// 用类似 map 的数据结构
// 保存对应关系
map<char, char> brace_mp;
brace_mp.insert(make_pair<>('(', ')'));
brace_mp.insert(make_pair<>('[', ']'));
brace_mp.insert(make_pair<>('{', '}'));

stack<char> left_brace_st;
for (int i = 0; i < s.length(); i++)
{
// 左括号入栈
// 右括号弹出栈
if (brace_mp.count(s[i])) // 左括号
left_brace_st.push(s[i]);

else // 右括号
{
if (!left_brace_st.empty())
{
auto tmp_left_brace = left_brace_st.top();

if (s[i] != brace_mp[tmp_left_brace])
break; // 跳出循环,残留元素,统一 return false
else
left_brace_st.pop();
}
else
return false;
}
}

return left_brace_st.empty();
}
};