【问题描述】

一个合法的括号串,是指只包含括号的串,如果满足如下条件:

(1)<> () [] {} 这四对括号是合法的;

(2)如果r是合法括号串,则<r> (r) [r] {r}也是;

(3)如果r,s是合法括号串,则rs也是;

所以<<>> , [<>{}(())],[({<>})]是合法的括号串,而)(,[( ])就不是。

【输入形式】

输入第一行正整数t (10 ≤ n ≤ 100),表示有多少组测试数据。

后面有t行,每行一个只包含8种括号符号的括号串。

40%的括号串的长度L 2 ≤ L≤ 20;

30%的括号串的长度L 2 ≤ L≤ 200;

20%的括号串的长度L 2 ≤ L≤ 2000;

10%的括号串的长度L 2 ≤ L≤ 20000;

【输出形式】

对于每组测试数据,如果括号串是合法的,输出“Yes”(输出没有引号)占一行,否则,输出“No”(输出没有引号)占一行。

【样例输入】

6
<<>>
)(
[<>{}(())]
[({<>})]
[(])
<([{

【样例输出】

Yes
No
Yes
Yes
No
No

算法思想:

  1. 对于每个输入的字符串,我们使用一个栈来检查括号的匹配情况。

  2. 遍历输入字符串的每个字符:

    • 如果遇到左括号(<([{),将其压入栈中。
    • 如果遇到右括号(>)]}),需要进行匹配检查:
      • 如果栈为空,表示当前右括号没有与之匹配的左括号,将当前右括号压入栈中,并且结束检查。
      • 否则,取出栈顶元素,与当前右括号进行匹配检查:
        • 如果匹配成功,则将栈顶元素弹出。
        • 如果匹配失败,则将当前右括号压入栈中,并且结束检查。
  3. 检查结束后,判断栈是否为空:

    • 如果栈为空,表示所有左括号都有与之匹配的右括号,输出 "Yes"。
    • 如果栈不为空,表示有未匹配的左括号或多余的右括号,输出 "No"。
#include <iostream>
#include <stack>
#include <cstring>int main() {int n;std::cin >> n;for (int i = 0; i < n; i++) {std::stack<char> a; // 创建栈a,用于括号匹配std::string test;std::cin >> test;for (int j = 0; j < test.length(); j++) {if (test[j] == '<' || test[j] == '(' || test[j] == '[' || test[j] == '{') {a.push(test[j]); // 遇到左括号,将其压入栈中}if (test[j] == '>' || test[j] == ')' || test[j] == ']' || test[j] == '}') {if (a.empty()) {a.push(test[j]); // 栈为空,当前右括号没有与之匹配的左括号,将其压入栈中并结束检查break;}char b = a.top(); // 取出栈顶元素if ((b == '<' && test[j] == '>') || (b == '(' && test[j] == ')') || (b == '[' && test[j] == ']') || (b == '{' && test[j] == '}')) {a.pop(); // 匹配成功,弹出栈顶元素} else {a.push(test[j]); // 匹配失败,将当前右括号压入栈中并结束检查break;}}}if (a.empty()) {std::cout << "Yes" << std::endl; // 栈为空,所有括号匹配成功} else {std::cout << "No" << std::endl; // 栈不为空,括号匹配失败}}return 0;
}

湖大CG满分教程:作业训练一编程题5. 合法的括号串相关推荐

  1. 湖大CG满分教程:文件排版(文本文件读写)

    问题描述] 英文电影中参演人员名单一般以某种方式进行排版显示.给定一个未排版的文件listin.txt,该文件中每行参演人员名单由冒号ldquo:rdquo分隔成前后两部分,但格式杂乱无章,单词(由除 ...

  2. 湖大CG满分教程:练习五1. 我爱数学,我爱编程,我更爱多文件编程

    问题描述] 从键盘输入任意多个正整数,判断其中有多少个素数和回文数? [输入形式] 输入任意多个正整数,输入使用ctrl^Z结束. [输出形式] 输出为两个整数,分别表示输入的若干个数中,素数.回文数 ...

  3. Day14作业 三、编程题 写一个Student类,属性:名字,年龄,分数,班级 (注意分包)

    三.编程题 写一个Student类,属性:名字,年龄,分数,班级 (注意分包) 写一个测试类:创建一个集合,里面装6个学生(有三个班级class01,class02,class03) 例如:list. ...

  4. python期末编程题_Python 语言程序设计二级教程第七章编程题

    编程题1 f=open('file1.txt','w') f.write('My name is Lin') f.write('I am from China') f.close() k=open(' ...

  5. 暑假matlab最后一次训练(编程题)碎纸片的拼接复原(前2题)

    对于给定的来自同一页印刷文字文件的碎纸机破碎纸片(仅纵切),建立碎纸片拼接复原模型和算法,并针对附件1.附件2给出的中.英文各一页文件的碎片数据进行拼接复原.如果复原过程需要人工干预,请写出干预方式及 ...

  6. 19湖大考研经验总结

    考研的一年多时间很快就过去了,现在也通过了学校的复试,成为了准研究生一枚,想记录一下这段时间的想法和经验. 关于联系导师的问题,可参考 如何选择研究生导师 . 初试 我大概是18年3月初开始准备的考研 ...

  7. CG基础教程-陈惟老师十二讲笔记

    转自 麽洋TinyOcean:http://www.douban.com/people/Tinyocean/notes?start=50&type=note 因为看了陈惟十二讲视频没有课件,边 ...

  8. python大神教程_大神python教程415集全套,拿走不谢

    大神的教程 由北京尚学堂高淇老师亲自录制,2019Python自学教程全新升级为<Python+数据分析+机器学习>能力逐级提升,打造技能更全面的全栈工程师. Python作为一种编程语言 ...

  9. TorchProtein教程--预训练的蛋白质结构表示(5)

    TorchProtein教程–预训练的蛋白质结构表示(5) 本教程来自唐建团队的开源框架torchprotein 目录 torchprotein安装 蛋白质数据结构 基于序列的蛋白质特性预测 基于结构 ...

最新文章

  1. android menu点击事件6,Android Menu
  2. 剑指Offer Ⅱ 005.单词长度的最大乘积 (力扣剑指Offer专项突击版——整数_5)
  3. 【pmcaff】2014互联网公司薪资排行榜
  4. Android之webView入门
  5. MVC设计模式学习总结
  6. matlab求解helmholtz,MATLAB与科学计算(第2版)
  7. mysql 日志节点恢复_基于binlog二进制日志的MySQL恢复笔记
  8. 前端开发 页面跳转练习 0228未完成
  9. DAS 2020 Keynote Speech | Adobe 文档分析技术介绍
  10. 正在导出系统过程对象和操作 卡住_开会时CPU 飙升100%同事们都手忙脚乱记一次应急处理过程
  11. Atitit io读取文件法 目录 1. 文件法 1 1.1. 异步读取文件: 1 1.2. 2.同步读取方法 1 1.3. 二进制读文件: 1 2. 读取api规范 1 3. Atitit 按照
  12. 通过Python终端输入命令对NAO机器人进行实时控制
  13. 计算体重指数BMI -C语言初学
  14. sql server 数据库正在使用该文件的解决办法
  15. 我们是如何改进YOLOv3进行红外小目标检测的?
  16. 吉林大学软件学院2021级计算机组成原理期末50道简答题
  17. 使用NSIS制作安装包
  18. aix kill java_AIX环境Java进程cpu瓶颈分析(转)
  19. python+appium,常见报错与解决方法
  20. 如何成为月薪5W的数据产品经理?

热门文章

  1. java堆栈内存_关于 js 与 Java 堆栈内存的一些疑惑
  2. Ubuntu20.04下 嵌入式 Qt 开发环境的搭建(适用于Tiny6410)
  3. 第二十二课php注入,第二十二课 生命的痛苦及其解脱
  4. 几年了,我依然记得这故事的名字
  5. NVIDIA Jetson YOLOv5 tensorRT部署和加速 C++版
  6. Tensorflow命名空间与计算图可视化
  7. 20080808今天已经是奥运会的开幕时间
  8. 重谈堆栈方向和栈溢出的利用(栈溢出攻击原理)
  9. Python读取和保存GIF图片
  10. 安卓dp转px,px转dp方法