uva673 Parentheses Balance(模拟+栈)

题意:判断给定的括号是否匹配平衡。


思路:用栈来模拟 遇到'(' 或'['的时候入栈, 遇到 ')'或']'跟栈定匹配。匹配成功则栈顶出栈。 最后栈空则括号平衡。陷阱: 小心))))))))))】】】】】】】】括号组


算法复杂度: 有几个符号就要入栈、匹配几次, 所以是o(N)


思路:

#include <cstdio>
#include <stack>
using namespace std;

int main()
{
	int n;
	stack<char> sta;
	scanf("%d%*c", &n);
	while (n--) {
		// init
		while (!sta.empty()) {
			sta.pop();
		}

		// enter
		char ch;
		while ((ch = getchar()) != '\n') {
			if (ch == '(' || ch == '[') {
				sta.push(ch);
			} else if (ch == ']' || ch == ')'){
				if (sta.empty()) {
					sta.push(ch);
				} 

				if (ch == ']') {
					if (sta.top() != '[') {
					} else {
						sta.pop();
					}
				} else {
					if (sta.top() != '(') {
					} else {
						sta.pop();
					}
				}
			}
		}

		if (sta.empty()) {
			printf("Yes\n");
		} else {
			printf("No\n");
		}
		
	}

	return 0;
}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值