2020牛客寒假算法基础集训营4.B——括号序列STL

Posted Nirvana柒

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2020牛客寒假算法基础集训营4.B——括号序列STL相关的知识,希望对你有一定的参考价值。


​题目传送门​


题目描述

给出一个仅包含’[’,’]’,’(’,’)’,’’,’六种字符的括号序列,判断其是否合法。

  • 空串是一个合法的括号序列
  • 如果A, B 都是合法的括号序列,那么AB也是合法的括号序列
  • 如果A是合法的括号序列,(A) , [A], A都是合法的括号序列

输入描述:

一行一个字符串S,只包含题目中的六种括号字符


输出描述:

输出为一行"Yes" 或"No"


输入

()[]
([])
([)]


输出

Yes
Yes
No


备注:

2020牛客寒假算法基础集训营4.B——括号序列【STL】_括号序列


题解

  • 使用栈,从左到右处理每一个括号:
  • 如果是左括号,那么入栈,然后继续读下一个括号
  • 如果是右括号,那么就要看这个右括号和栈顶的括号是否匹配
  • 如果匹配,那么弹出栈顶的括号,继续读下一个括号,否则说明不合法
  • 最后,如果栈为空,说明此括号序列是合法的。
  • 注意特殊样例 ‘(’,输出注意栈是否为空即可

AC-Code

#include <bits/stdc++.h>
using namespace std;
#define
typedef long long ll;

const int INF = 0x7fffffff;
const int maxn = 1e6 + 7;


bool check(char a, int b)

if (a == ( && b == )) return true;
else if (a == [ && b == ]) return true;
else if (a == && b == ) return true;
else return false;

int main()
string s;
while (cin >> s)
stack<char> st;
bool flag = true;
for (int i = 0; i < s.length(); ++i)
if (s[i] == [ || s[i] == ( || s[i] == )
st.push(s[i]);

else
if (st.empty()) // 注意特判为空
flag = false;
break;

char t = st.top();
st.pop();
if (!check(t, s[i]))
flag = false;
break;



if (flag && st.empty()) cout << "Yes" << endl; // 注意判空
else cout << "No" << endl;

return 0;


以上是关于2020牛客寒假算法基础集训营4.B——括号序列STL的主要内容,如果未能解决你的问题,请参考以下文章

2020牛客寒假算法基础集训营2——H.施魔法DP

2022牛客寒假算法基础集训营6题解 ABCDEFGHIJ

2022牛客寒假算法基础集训营6 全部题解

2022牛客寒假算法基础集训营6 全部题解

2020牛客寒假算法基础集训营4.C——子段乘积线段树

2020牛客寒假算法基础集训营4.G——音乐鉴赏概率