平衡的括号Uva-673

题意大概:输入一个包括“()”和“[ ]”的括号序列,判断是否合法。具体规则如下:

1.空串合法。

2.如果A和B都合法,那么AB也合法。

3.如果A合法,那么[A]和(A)都合法。

思路:

初始化一个栈,输入序列,然后进行扫描:

1.序列长度肯定是偶数(包括 0);

2.如果是“[”或者“(”则将其压进栈里面;

3.如果是“)”或者“]”,则根据当前栈顶的元素值进行判断,

如果匹配不成功的话,就不用再进行匹配了,肯定是不能成功的!

代码如下:

<span style="font-family:KaiTi_GB2312;font-size:18px;"><strong>#include<cstdio>
#include<iostream>
#include<cstring>
#include<stack>
using namespace std;
const int maxn=201314;
char str[maxn];
stack<char> s;//用来存储左符号的栈
void init()
{
    while(!s.empty())
    s.pop();
}
void solve()
{
    int len=strlen(str);
    if(len%2!=0)//如果len是奇数,证明不可能匹配成功!
    {
        cout<<"No"<<endl;
        return ;
    }
    for(int i=0;i<len;i++)
    {
        if(str[i]=='['||str[i]=='(')
           s.push(str[i]);//如果是(或者[则直接压入栈里面!
        else
        {
            char now=s.top();
            if((now=='('&&str[i]==')')||(now=='['&&str[i]==']'))//如果遇见)或者]符号,则进行判断!
            {
                s.pop();
            }
            else
            {
                cout<<"No"<<endl;
                return ;
            }
        }
    }
    cout<<"Yes"<<endl;
    return ;
}
int main()
{
    int n;
    cin>>n;
    while(n--)
    {
        cin>>str;
        init();
        solve();
    }
    return 0;
}
</strong></span>

时间: 2024-07-30 20:31:28

平衡的括号Uva-673的相关文章

UVa 673 括号平衡

思路:简单的匹配操作,利用栈. Code: #include<stdio.h> #include<string.h> char stack[135]; int main() { int n; scanf("%d",&n); getchar(); while(n-->0) { memset(stack,0,sizeof(stack)); char c; int top=0; int flag=1; while((c=getchar())!='\n')

UVA 673(括号匹配)

本地单文件上传脚本,命名uf 这是在本机上做的测试,利用bpcs_uploader脚本实现,只是进行简单的封装,自动完善云端文件路径. 技术要点:使用dirname获取文件所在目录,使用pwd获取文件完整路径,并作为云端文件路径. #!/bin/bash cur_dir=$(cd "$(dirname "$1")"; pwd) name=$(basename "$1") /home/grm/bin/bpcs_uploader/bpcs_uploa

UVA - 673 - Parentheses Balance (栈的应用!)

UVA - 673 Parentheses Balance Time Limit: 3000MS   Memory Limit: Unknown   64bit IO Format: %lld & %llu Submit Status Description  Parentheses Balance  You are given a string consisting of parentheses () and []. A string of this type is said to be co

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 #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

UVa 673 Parentheses Balance(括号配对 栈)

题意  判断输入的括号序列是否是配对的 栈的基础应用  栈顶元素与输入的字符匹配就出栈咯  注意括号序列可以为空 STL栈 #include <bits/stdc++.h> using namespace std; int main() { int cas; char c; cin >> cas; getchar(); while(cas--) { stack<char> s; while((c = getchar()) != '\n') { if(s.empty())

UVa 673 (括号配对) Parentheses Balance

本来是当做水题来做的,后来发现这道题略坑. 首先输入的字符串可能是空串,所以我用了gets函数,紧接着就被scanf("%d", &n)后面的换行符坑掉了. 于是乎再加一句getchar() 1 #include <cstdio> 2 #include <stack> 3 #include <cstring> 4 using namespace std; 5 6 const int maxn = 150; 7 char s[maxn]; 8

uva 673括号匹配问题

注意:空行要输出Yes,要用gets读函数,这道题让我学会了gets和scanf函数除了空格问题之外还是 有区别的,scanf把空格,Tab, 回车都视为结束标志,不会读入他们,后面自动加'\0',所以空格,回车,Tab 都在缓冲区,可以用getchar()读取到,但是gets()函数虽然也将回车视为结束标志,但是他们会将回车读 入,读到字符串里是'\0',所以,他们就不会存在缓冲区里,也就是说用getchar()读取不到他们了... 放代码: #include<stdio.h> #inclu

uva 673 Parentheses Balance

Parentheses Balance 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 pr