括号平衡(c++题解)

发布时间:2024年01月24日

题目描述

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

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";
	}
    
}

文章来源:https://blog.csdn.net/hb_zhyu/article/details/135773302
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。