0
点赞
收藏
分享

微信扫一扫

[数组]BM44 有效括号序列-简单

​​BM44 有效括号序列​​

描述

给出一个仅包含字符'(',')','{','}','['和']',的字符串,判断给出的字符串是否是合法的括号序列

括号必须以正确的顺序关闭,"()"和"()[]{}"都是合法的括号序列,但"(]"和"([)]"不合法。


数据范围:字符串长度 [数组]BM44 有效括号序列-简单_栈要求:空间复杂度 [数组]BM44 有效括号序列-简单_栈_02,时间复杂度 [数组]BM44 有效括号序列-简单_栈_02

示例1

输入:

"()[]{}"

复制返回值:

true

复制

示例2

输入:

"[]"

复制返回值:

true

复制

示例3

输入:

"([)]"

复制返回值:

false

题解

思路:

遍历字符串:

  1. 如果是左括号,则入栈
  2. 如果是右括号,则判断是否和栈顶元素匹配
  3. 当遍历完字符串后,如果栈为空则完全匹配,否则匹配失败

代码如下:

#include <bits/stdc++.h>

// https://www.nowcoder.com/practice/37548e94a270412c8b9fb85643c8ccc2?tpId=295&tags=&title=&difficulty=0&judgeStatus=0&rp=0&sourceUrl=%2Fexam%2Foj%3Fpage%3D1%26tab%3D%25E7%25AE%2597%25E6%25B3%2595%25E7%25AF%2587%26topicId%3D295
bool isValid(std::string s)
{
static std::map<char, char> brackets = {
{'(', ')'},
{'{', '}'},
{'[', ']'}};

std::stack<char> left_brackets;
for (int i = 0; i < s.size(); ++i)
{
if (brackets.find(s[i]) != brackets.end())
{
left_brackets.push(s[i]);
}
else
{
if (left_brackets.empty())
{
return false;
}
auto l = left_brackets.top();
if (brackets[l] != s[i])
{
return false;
}
left_brackets.pop();
}
}
return left_brackets.empty();
}
举报

相关推荐

0 条评论