专栏文章

Colorful Bracket Sequence

AT_abc394_d题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@miq5hxr1
此快照首次捕获于
2025/12/03 23:17
3 个月前
此快照最后确认于
2025/12/03 23:17
3 个月前
查看原文
一个括号匹配的升级版。
维护一个栈,同时扫一遍字符串,如果当前扫到的位置为左括号就加入栈中,如果是右括号且与栈顶匹配就弹出栈顶,反之显然不成立(因为一个可以被删干净的序列必定是层层匹配的,即存在位置满足匹配的括号中间没有遮挡,在删去该匹配后仍然如此),最后输出即可。
注意在最后要查看是否栈为空。
CPP
#include<bits/stdc++.h>
using namespace std;
stack<char>st;
string s;
int check(char ch){
	if(ch=='<' || ch=='>')return 1;
	if(ch=='(' || ch==')')return 2;
	if(ch=='[' || ch==']')return 3;
}
signed main(){
	cin >> s;
	for(int i=0;i<s.size();++i){
//		cout << i;
		if(s[i]=='<' || s[i]=='(' || s[i]=='[')st.push(s[i]);
		else if(s[i]=='>' || s[i]==')' || s[i]==']'){
			if(st.size()==0 || check(s[i])!=check(st.top())){puts("No");return 0;}
			st.pop();
		}else {puts("No");return 0;}
	}
//	cout << st.siz
	if(st.size()!=0)puts("No");
	else puts("Yes");
	return 0;
}

评论

0 条评论,欢迎与作者交流。

正在加载评论...