平衡的括号(名字怪怪的~)

题意:

You are given a string consisting of parentheses () and []. A string of this type is said to be correct:

(a)
if it is the empty string
(b)
if A and B are correct, AB is correct,
(c)
if A is correct, () and [] is correct.

Write a program that takes a sequence of strings of this type and check their correctness. Your program can assume that the maximum string length is 128.

Input

The file contains a positive integer n and a sequence of n strings of parentheses () and [], one string a line.

Output

A sequence of Yes or No on the output file.

Sample Input

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

Sample Output

Yes
No
Yes

思路:        一个数组,一个栈。3个if,1个else。        从数组里面取括号,是左括号就存到栈里去,因为配对的括号要[]()而不是][和)(,取到右括号,就判断栈里有没有左括号,有则配对成功,pop出这个括号。      否则将右括号存进去,break,即前面没有可以配对的左括号。输出NO。

源代码:
 1 #include<iostream>
 2 #include<stack>
 3 #include<cstring>
 4 #include<cstdio>
 5 using namespace std;
 6 int main()
 7 {
 8     int t;
 9     cin >> t;
10     getchar();
11     while (t--)
12     {
13         char c;
14         char s[130];
15         stack<char> sta;                          //定义一个栈
16
17         cin.getline(s, 130);                      //输入一堆括号
18
19         int len = strlen(s);
20
21         for (int i = 0; i < 130 && i < len; i++)         //从数组里面开始取括号
22         {
23             c = s[i];
24             if (c == ‘]‘)                     // 为右括号
25             {
26                 if (sta.empty() || sta.top() != ‘[‘)  //判断队列是否为空,或者存不存在与之配对的左括号
27                 {                                      //为空或者没有与之配对的括号就存进去
28                     sta.push(c);
29                     break;
30                 }
31                 else
32                 {
33                     sta.pop();                     //配对成功,则删除队列中的这个括号
34                 }
35             }
36             else if (c == ‘)‘)
37             {
38                 if (sta.empty() || sta.top() != ‘(‘)
39                 {
40                     sta.push(c);
41                     break;
42                 }
43                 else
44                 {
45                     sta.pop();
46                 }
47             }
48             else if (c == ‘[‘ || c == ‘(‘)     //取出来的为左括号
49             {                                  //存进去,等待接下来的右括号配对
50                 sta.push(c);
51             }
52             else
53             {
54                 sta.push(c);               //其他字符,直接存进去,break;
55                 break;
56             }
57         }
58         if (sta.empty())                      //队列为空了,已经配对完了。
59         {
60             cout << "Yes" << endl;
61         }
62         else
63         {
64             cout << "No" << endl;
65         }
66
67     }
68
69
70     return 0;
71 }


心得:      栈,“后进先出”。与队列要进行区分。这道题请教了别人,自己开始的思路还是对的,但是][跟)(这两种案例都会判成成功。还是要考虑一些特殊情况,栈的用法还是要好好学。脑子不够用呐([email protected][email protected]=)~~~~要有耐心耐心。


时间: 2024-10-18 23:24:17

平衡的括号(名字怪怪的~)的相关文章

uva673_平衡的括号(网上写的好麻烦。。)

/////////////////////////////////////////////////////////////////////////////////////////////////////// 作者:tt2767 声明:本文遵循以下协议自由转载-非商用-非衍生-保持署名|Creative Commons BY-NC-ND 3.0 查看本文更新与讨论请点击:http://blog.csdn.net/tt2767 链接被删请百度: CSDN tt2767 ///////////////

平衡的括号[UVA-673]

UVA673 Parentheses Balance 书上习题6-1,题比较简单,主要是使用栈这个"后进先出"的数据结构.因为平衡的括号,必然可以在左半括号进行push而右半括号进行pop,当到达序列末尾而栈不空,显然不满足题意了. 抛开题目说几点内容:一是之前看王爽的<汇编语言>,对栈的pop操作有些误解.在汇编语言中(8086包括现在的IA32.X86-64指令),pop指令有一个操作数,表示将栈顶的元素出栈后所放置的内存单元地址:而在数据结构的栈中,pop操作只是将栈

平衡的括号Uva-673

题意大概:输入一个包括"()"和"[ ]"的括号序列,判断是否合法.具体规则如下: 1.空串合法. 2.如果A和B都合法,那么AB也合法. 3.如果A合法,那么[A]和(A)都合法. 思路: 初始化一个栈,输入序列,然后进行扫描: 1.序列长度肯定是偶数(包括 0): 2.如果是"["或者"("则将其压进栈里面: 3.如果是")"或者"]",则根据当前栈顶的元素值进行判断, 如果匹配不成

平衡的括号

题目: You are given a string consisting of parentheses () and []. A string of this type is said to be correct: (a) if it is the empty string (b) if A and B are correct, AB is correct, (c) if A is correct, (A ) and [A ] is correct. Write a program that

UVa 673 平衡的括号

题意:给出包含"()"和"[]"的括号序列,判断是否合法. 用栈来完成,注意空串就行. 1 #include<iostream> 2 #include<string> 3 #include<cstring> 4 #include<stack> 5 using namespace std; 6 7 stack<char> sta; 8 string s; 9 10 int solve() 11 { 12 ch

Leetcode 856. Score of Parentheses 括号得分(栈)

Leetcode 856. Score of Parentheses 括号得分(栈) 题目描述 字符串S包含平衡的括号(即左右必定匹配),使用下面的规则计算得分 () 得1分 AB 得A+B的分,比如()()得2分 (A) 得2A分, 比如(()())得2(1+1)分 测试样例 Example 1: Input: "()" Output: 1 Example 2: Input: "(())" Output: 2 Example 3: Input: "()(

lua 5.1语法约定

Lua 5.1参考手册 由罗伯特·Ierusalimschy路易斯Henrique de Figueiredo沃尔德蔡氏 ?一个版权?2006 A¢A€"2012 Lua.org,银行业者.免费的根据Lua许可证. 内容一个?·指数一个?·其他版本一个?·英语一个?·portuguA?Aa年代一个?·espaA?A±ol 1 A¢A€"介绍 Lua是一个扩展编程语言设计的支持一般过程式编程与数据描述设施.它还提供了很好的支持面向对象编程,函数式编程,数据驱动的编程.Lua是打算作为一个

2016年湖南省第十二届大学生计算机程序设计竞赛---Parenthesis(线段树求区间最值)

原题链接 http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1809 Description Bobo has a balanced parenthesis sequence P=p1 p2…pn of length n and q questions. The i-th question is whether P remains balanced after pai and pbi  swapped. Note that questions ar

将所有的碎片信息放进去的结构 ,大大减轻大脑的负担,更容易地解决问题

人类大脑在处理信息的时候,有两个规律:第一,不能一次太多,太多信息会让我们的大脑觉得负荷过大:第二,喜欢有规律的信息. 你可能有这样的经历,我们在解决问题.进行决策的时候,常常觉得脑子里一团乱,很多信息迸发出来,但你就是无法将他们变成一个完整的解决方案.一个理性的选择.这种状态持续时间一长,我们的大脑就要罢工,开始头疼,可问题并没有解决. 另外,你也可能碰到过这样的一些人,他说的每个字你都听得懂,然而组合在一起,你也不知道他想说什么,听他说话时间一长,你会头疼,变得焦躁"你TM到底想说什么&qu