括号匹配问题

1000(ms)
65535(kb)
3045 / 13375

假设表达式中允许包含两种括号:圆括号和方括号。编写一个算法判断表达式中的括号是否正确配对。

输入

由括号构成的字符串,包含”(“、”)“、”[“和”]“。

输出

如果匹配输出YES,否则输出NO。

样例输入

[([][]())]

样例输出

YES 

首先是手撕链栈的用法
 #include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
typedef char Datetype;
using namespace std; typedef struct link{
Datetype date;
struct link *next;
}Lnode; void Initstack(Lnode *&L)
{
L=(Lnode *)malloc(sizeof(Lnode));
L->next=NULL;
} void destroystack(Lnode *&L)
{
Lnode *p=L,*r=p->next;
while(r!=NULL)
{
free(p);
p=r;
r=r->next;
}
free(p);
} void push(Lnode *L , Datetype e)
{
Lnode *p;
p = (Lnode *)malloc(sizeof(Lnode));
p->date = e ;
p->next=L->next;
L->next=p;
} bool stackempty(Lnode *L)
{
return(L->next==NULL);
} bool pop(Lnode *&L , Datetype &e)
{
Lnode *p;
if(L->next==NULL)
return false;
p=L->next;
L->next=p->next;
e=p->date;
free(p);
return true;
} bool gettop(Lnode *L, Datetype &e)
{
if(L->next==NULL)
return false;
e=L->next->date;
return true;
} int main()
{
char a[],x;
cin>>a;
Lnode *L=NULL;
Initstack(L);
for(int i=;i<strlen(a);i++)
{
if(stackempty(L)) //栈为空就直接入栈
{
push(L,a[i]);
}
else{
gettop(L,x);
if(x=='('&&a[i]==')') //配对后就出栈
{
pop(L,x);
}
else if(x=='['&&a[i]==']')
{
pop(L,x);
}
else
{
push(L,a[i]); //未配对成功就入栈
}
}
}
if(stackempty(L))
cout<<"YES";
else
cout<<"NO";
destroystack(L);
return ;
}
然后是利用STL的做法
 #include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<stack>
#include<string>
using namespace std;
char arr;
int main()
{
stack<char>st;
while(scanf("%c",&arr)&&arr!='\n')
{
if(st.empty())
{
st.push(arr);
continue;
}
if((arr==']'&&st.top()=='[')||(arr==')'&&st.top()=='('))
st.pop();
else
st.push(arr);
}
if(st.empty())
cout<<"YES";
else
cout<<"NO";
}


swust oj 962的更多相关文章

  1. [Swust OJ 404]--最小代价树(动态规划)

    题目链接:http://acm.swust.edu.cn/problem/code/745255/ Time limit(ms): 1000 Memory limit(kb): 65535   Des ...

  2. [Swust OJ 649]--NBA Finals(dp,后台略(hen)坑)

    题目链接:http://acm.swust.edu.cn/problem/649/ Time limit(ms): 1000 Memory limit(kb): 65535 Consider two ...

  3. SWUST OJ NBA Finals(0649)

    NBA Finals(0649) Time limit(ms): 1000 Memory limit(kb): 65535 Submission: 404 Accepted: 128   Descri ...

  4. [Swust OJ 1023]--Escape(带点其他状态的BFS)

    解题思路:http://acm.swust.edu.cn/problem/1023/ Time limit(ms): 5000 Memory limit(kb): 65535     Descript ...

  5. [Swust OJ 1125]--又见GCD(数论,素数表存贮因子)

    题目链接:http://acm.swust.edu.cn/problem/1125/ Time limit(ms): 1000 Memory limit(kb): 65535   Descriptio ...

  6. [Swust OJ 1126]--神奇的矩阵(BFS,预处理,打表)

    题目链接:http://acm.swust.edu.cn/problem/1126/ Time limit(ms): 1000 Memory limit(kb): 65535 上一周里,患有XX症的哈 ...

  7. [Swust OJ 1026]--Egg pain's hzf

      题目链接:http://acm.swust.edu.cn/problem/1026/     Time limit(ms): 3000 Memory limit(kb): 65535   hzf ...

  8. [Swust OJ 1139]--Coin-row problem

    题目链接:  http://acm.swust.edu.cn/contest/0226/problem/1139/ There is a row of n coins whose values are ...

  9. [Swust OJ 385]--自动写诗

    题目链接:http://acm.swust.edu.cn/problem/0385/ Time limit(ms): 5000 Memory limit(kb): 65535    Descripti ...

随机推荐

  1. [DevExpress使用随笔]之NavBarControl控件(一)【转】

    https://blog.csdn.net/HXC_HUANG/article/details/78614092 NavBarControl是具有可扩展组的侧导航控件.一.在Winform窗口中拖入N ...

  2. 图解 Git

    https://juejin.im/entry/5917c463da2f60005de84195

  3. windows10创建ftp服务器

    1.创建用户 2.创建FTP服务 3.开通防火墙服务 建立端口21,20入站规则 4.访问测试

  4. 【SQL 代码】SQL 语句记录(不定时更新)

    1.数值四舍五入,小数点后保留2位 round() 函数是四舍五入用,第一个参数是我们要被操作的数据,第二个参数是设置我们四舍五入之后小数点后显示几位. numeric 函数的2个参数,第一个表示数据 ...

  5. windows ip 缓存清理

    ip缓存 ipconfig /release dns缓存 ipconfig/flushdns

  6. java对对象或者map的属性进行排序

    package com.xkj.spider.mpb.util; import java.lang.reflect.Method; import java.util.HashMap; import j ...

  7. np.percentile获取中位数、百分位数

    给定一个递增数组a,求它的中位数. np.percentile(a,50) 中位数就是50%处的数字,也可以获得0%.100%处的数字,0%处的数字就是第一个数字,100%处的数字就是最后一个数字.1 ...

  8. simHash 简介以及 java 实现

    传统的 hash 算法只负责将原始内容尽量均匀随机地映射为一个签名值,原理上相当于伪随机数产生算法.产生的两个签名,如果相等,说明原始内容在一定概 率 下是相等的:如果不相等,除了说明原始内容不相等外 ...

  9. CentOS 安装Nginx1.14.0

    原文地址:http://www.cnblogs.com/ascd-eg/p/9275441.html 一.安装所需环境   1.gcc 安装         yum install gcc-c++   ...

  10. Oracle&SQLServer中实现跨库查询

    一.在SQLServer中连接另一个SQLServer库数据 在SQL中,要想在本地库中查询另一个数据库中的数据表时,可以创建一个链接服务器: EXEC master.dbo.sp_addlinked ...