题目链接:http://acm.ayit.edu.cn/contest/12/problem/50
分析:保证括号的全部匹配,可以通过入栈和出栈的操作,最终通过判断栈是否为空来判断是否为合法的括号序列。
用数组模拟栈:
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
char a[100005],st[100005];
int main(){
scanf("%s",a);
int len=strlen(a);
int t=0;
for(int i=0; i<len; i++){
if(a[i]=='('||a[i]==')'||a[i]=='{'||a[i]=='}'||a[i]=='['||a[i]==']'){
if(a[i]==')'&&st[t-1]=='(')
t--;/*出栈操作*/
else if(a[i]=='}'&&st[t-1]=='{')
t--;
else if(a[i]==']'&&st[t-1]=='[')
t--;
else
st[t++]=a[i];/*入栈操作*/
}
}
if(t==0)
printf("YES\n");
else
printf("NO\n");
return 0;
}
用stack堆栈容器
#include<cstdio>
#include<cstring>
#include<stack>
#include<algorithm>
using namespace std;
int main() {
stack<char>q;
char a[100001];
scanf("%s",a);
int len=strlen(a);
for(int i=0; i<len; i++) {
if(q.empty()) {
q.push(a[i]);
continue;
}
int x=q.top();/*访问栈顶元素*/
if(x=='('&&a[i]==')')q.pop();
else if(x=='{'&&a[i]=='}')q.pop();
else if(x=='['&&a[i]==']')q.pop();
else
q.push(a[i]);
}
if(q.empty())
printf("YES\n");
else
printf("NO\n");
return 0;
}
出来混,迟早要还的。