1486:括号匹配

原题:

题目描述

        输入一个由()[]四种符号构成的字符串。判断其中的括号是否匹配,是,就输出yes,否则输出no。比如:输入“([])”、“([()])”、“[((()))]”、“()[][][]()[]”这几个字符串(双引号内部的内容),我们都算是匹配的。再比如:输入“([)”、“([)]”、“([(]))”这几个字符串,我们都认为是不匹配的。

输入

        一个由()[]四种符号构成的字符串

输出

        如果匹配,请输出yes,如果不匹配,请输出no

样例

样例输入 #1
([])
样例输出 #1
yes
样例输入 #2 
[][()()(()()(())[]
 样例输出 #2 
no
样例输入 #3 
([[([]
样例输出 #3 
no

分析

        这是一道涉及到栈(stack)的问题,具体什么是栈,请选择以个链接打开了解

C++中stack的用法及其解析

【C++ 十四】C++ stack容器

【STL】C++ STL之stack详解

c++ stack用法详解

        首先,我们要获取输入,就暂时用std::string来存储一下输入数据。在核心部分用到栈,所以我们要定义一个。随后就是核心部分,从头遍历到脚趾尖!首先,判断遍历的字符s[i]是否是左括号,是的话就把左括号往栈里放,也就是stack::push();   如果是右括号,那么判断是否匹配,匹配成功就抵消,也就是stack::pop();  不成功呢?说明所有括号都匹配不了了,就可以结束了。可是,有一种特殊情况。可以看到,样例输入#3确实匹配了[],可是核心就结束了,所以还要在输出yes时留一手:在判断栈是不是空的。因为栈空就代表全部匹配成功了,否则不成功。

题解AC代码

#include <bits/stdc++.h> 
using namespace std; 
int main() {
	string s; 
	cin >> s; 
	stack<char> t; 
	for(int i=0; i<s.size(); i++) {
		if(s[i]=='('||s[i]=='[') 
			{t.push(s[i]); } 
		else if(!t.empty()&&t.top()=='('&&s[i]==')') 
			{t.pop(); } 
		else if(!t.empty()&&t.top()=='['&&s[i]==']') 
			{t.pop(); } 
		else 
			{cout << "no"; return 0; }
	}
	cout << (t.empty()?"yes":"no"); 
	return 0; 
}

创作不yee~,点一个赞,咱们下期再见!

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值