栈的运用:括号配对问题C++

题目描述

                    现在,有一行括号序列,请你检查这行括号是否配对。
                                                
  输入                            
  第一行输入一个数N

  输出                            
  每组输入数据的输出占一行,如果该字符串中所含的括号是配对的,则输出Yes,如果不配对则输出No

样例输入
[(])
(])
([])
样例输出
No
No
Yes

该题是一个不错的练习栈的操作

stack的成员函数
  1. void pop():弹出(即删除)栈顶元素
  2. T & top():返回栈顶元素的引用。通过此函数可以读取栈顶元素的值,也可以修改栈顶元素
  3. void push (const T & x):将 x 压入栈顶

主要思路

1、先以字符串的形式读入括号
2、遍历字符串
3、如果栈是空的就先将括号入栈
4、如果栈是空的将括号入栈
5、如果栈不空,判断a[j]是否可以与栈顶的元素配对,可以配对就弹出栈顶元素

注意

因为要循环判断多行,所以要判断一行的结束的时候要将栈清空

以下为代码

#include<iostream>//头文件
#include<stack>//栈的头文件
using namespace std;
int main()
{
 int n,i,j;
 cin>>n;
 string a;//字符串
 stack <char> stk;
 for(i=0;i<n;++i)//用来判断多行
 {
  cin>>a;
  int k=a.size();//k为字符串a的长度
  for(j=0;j<k;++j)
  {
   if(stk.empty()) stk.push(a[j]);//栈为空,a[j]入栈
   else if(stk.top()=='['&&a[j]==']')//栈不空且a[j]==']'
   {
    stk.pop();//出栈
   }
   else if(stk.top()=='('&&a[j]==')')//同上
   {
    stk.pop();
   }
   else stk.push(a[j]);
  }
  if(stk.empty()) cout<<"Yes"<<endl;//栈空则配对
  else cout<<"No"<<endl;
  while(!stk.empty()) stk.pop();//清空栈
 }
 
} 

如果有不懂可以评论。
让我们共同进步吧!

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值