博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
NYOJ 括号匹配
阅读量:4218 次
发布时间:2019-05-26

本文共 1190 字,大约阅读时间需要 3 分钟。

括号配对问题

时间限制:
3000 ms  |  内存限制:
65535 KB
难度:
3
描述
现在,有一行括号序列,请你检查这行括号是否配对。
输入
第一行输入一个数N(0<N<=100),表示有N组测试数据。后面的N行输入多组输入数据,每组输入数据都是一个字符串S(S的长度小于10000,且S不是空串),测试数据组数少于5组。数据保证S中只含有"[", "]", "(", ")" 四种字符
输出
每组输入数据的输出占一行,如果该字符串中所含的括号是配对的,则输出Yes,如果不配对则输出No
样例输入
3[(])(])([[]()])
样例输出
NoNo

Yes

这里需要mark些东西:
    关于char *p;与char p[max]区别,前者 只是在栈内分配了4个字节的空间存储地址,而后者则是直接在栈内申请了

max大小的空间用于存储,如果想要用字符串指针的话还是需要在堆内动态申请内存,例如:
                        char *p = (char*)malloc(100000*sizeof(char));
这样字符指针才真正的有了空间,不申请的话,只有存储地址那4个字节大小的空间;
#include
#include
#include
#include
#include
#include
#include
using namespace std;stack
s; int main() { int n; char a[10000+5]; //声明为指针类型时候是变量p而数组名a为常量 声明为p时候报错RE scanf("%d",&n); while(n--){ while(!s.empty())//每次清空栈 s.pop(); scanf("%s",a); bool flag = true; int len = strlen(a); for(int i = 0; i < len; ++i){ if(a[i] == '(' || a[i] == '['){ s.push(a[i]); } else{ if(s.empty()){//防止栈为空的情况会RE flag = false; break; } if(!s.empty()){ char c = s.top(); s.pop(); if(c == '(' && a[i] == ')' || c =='[' && a[i] == ']') continue; flag = false; break; } } } if(!flag){ printf("No\n"); } else{ printf("Yes\n"); } } return 0; }

转载地址:http://ghimi.baihongyu.com/

你可能感兴趣的文章
sd卡驱动分析之相关硬件操作和总结
查看>>
好的播文
查看>>
linux dd命令解析
查看>>
linux find命令详解
查看>>
S3C2440上touchscreen触摸屏驱动
查看>>
USB History Viewing
查看>>
怎样做可靠的分布式锁,Redlock 真的可行么?
查看>>
[图文] Seata AT 模式分布式事务源码分析
查看>>
pm 源码分析
查看>>
Sending the User to Another App
查看>>
kmsg_dump
查看>>
Getting a Result from an Activity
查看>>
Allowing Other Apps to Start Your Activity
查看>>
dev/mem
查看>>
pfn_valid 源码分析
查看>>
dev/kmem 和dev/mem的区别
查看>>
checkbox
查看>>
Sending Simple Data to Other Apps
查看>>
Receiving Simple Data from Other Apps
查看>>
中断API之__tasklet_schedule
查看>>