信息学奥赛一本通(C++)在线评测系统——基础(三)数据结构 —— 1354:括弧匹配检验
时间限制: 1000 ms 内存限制: 65536 KB
提交数: 5098 通过数: 1642
【题目描述】
假设表达式中允许包含两种括号:圆括号和方括号,其嵌套的顺序随意,如([ ]())或[([ ][ ])]等为正确的匹配,[( ])或([ ]( )或 ( ( ) ) )均为错误的匹配。
现在的问题是,要求检验一个给定表达式中的括弧是否正确匹配?
输入一个只包含圆括号和方括号的字符串,判断字符串中的括号是否匹配,匹配就输出 “OK” ,不匹配就输出“Wrong”。输入一个字符串:[([][])],输出:OK。
【输入】
输入仅一行字符(字符个数小于255)。
【输出】
匹配就输出 “OK” ,不匹配就输出“Wrong”。
【输入样例】
[(])
【输出样例】
Wrong
【来源】
No
代码
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
char a[100000];
int main ()
{
string s;
bool f;
cin>>s;
int t=0;
for(int i=0;i<s.size();i++)
{
if(s[i]=='('||s[i]=='[') a[++t]=s[i];
if(s[i]==')')
{
if(a[t]=='(') t--;
else t++;
}
if(s[i]==']')
{
if(a[t]=='[') t--;
else t++;
}
}
if(t==0) cout<<"OK"<<endl;
else cout<<"Wrong"<<endl;
return 0;
}
#include <iostream>
#include <string>
#include <stack>
using namespace std;
string s;
int n;
bool check(string s)
{
stack<char>p;
//p为栈
p.push('#');
//栈底为#,避免越界
for(int i=0;i<s.size();i++)
{
char c=s[i];
if(c==')')
{
if(p.top()!='(') return false;
else p.pop();
}
else if(c==']')
{
if(p.top()!='[') return false;
else p.pop();
}
else p.push(c);
}
return(p.size()==1);
}
int main ()
{
cin>>s;
if(check(s)) cout<<"OK"<<endl;
else cout<<"Wrong"<<endl;
return 0;
}