括号平衡(c++题解)

题目描述

在本题中,题目会先给你一个包含小括号() 及中括号 [] 的字串。当字串符合下列条件时我们称它为正确的运算式:

1、 该字串为一个空字串。

2、 如果 A 和 B 都为正确的运算式,则 AB 也为正确的运算式。

3、 如果 A 为正确的运算式,则 (A) 及 [A] 都为正确的运算式。

现在,请你写一支程序可以读入这类字串并检查它们是否为正确的运算式。

输入格式

第一行为正整数 ,代表接下来有  个字符串。

接下来的  行,每行是一个仅含小括号和中括号的字符串(长度不大于 10000)。

输出格式

针对每个输入的括号字符串,如果是正确的运算式,则输出 "Yes",否则输出 "No"。

样例

输入样例
复制4 
([])
(([()])))
([()[]()])()
([)]
输出样例
复制Yes
No
Yes
No

_____________________________________________________________________________

日常发作业题解。 

写作不易,点个赞呗!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 

_____________________________________________________________________________

#include <bits/stdc++.h>
using namespace std;
int n,idx=0;
string x;
char stk[100005];
void push(char x){
	stk[idx++]=x;
}
int top(){
	return stk[idx-1];
}
void pop(){
	idx--;
}
bool empty(){
	return idx==0;
}
int main(){
    cin>>n;
    for(int i=1;i<=n;i++){
    	idx=0; //气死我啦,一开始栈没有清空排错排了好久。
    	cin>>x;
    	bool flag=true;
    	for(int j=0;j<x.size();j++){
    		if(x[j]=='('||x[j]=='['){
    			push(x[j]);
			}else if(!empty()&&((x[j]==')'&&top()=='(')||(x[j]==']'&&top()=='['))){
				pop(); 
			}else{
				flag=false;
				break;
			}	
		}
		if(flag!=false&&empty())cout<<"Yes\n";	
		else cout<<idx<<"No\n";
	}
    
}

  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值