[ABC394D] Colorful Bracket Sequence 题解

题目大意

其实就是括号匹配,经典问题了。不过需要注意,这里只有连续的两个括号才能配对,例如 (<>) 是合法的,但 <(>) 不合法。

思路

和原括号匹配一样,我们使用一个栈,如果当前括号为左括号,则直接入栈,否则将其与栈顶字符进行匹配。最好记得查看栈是否为空。

代码参考

// Problem: D - Colorful Bracket Sequence
// Contest: AtCoder - KAJIMA CORPORATION CONTEST 2025 (AtCoder Beginner Contest 394)
// URL: https://atcoder.jp/contests/abc394/tasks/abc394_d
// Memory Limit: 1024 MB
// Time Limit: 2000 ms

#include<bits/stdc++.h>
#define ll long long
using namespace std;
string s;
stack<char> st;
bool flag=1;
int main(){
	cin>>s;
	for(int i=0;s[i];++i){
		if(s[i]=='('||s[i]=='<'||s[i]=='[') st.push(s[i]);
		else {
			if(st.empty()){
				flag=0;
				break;
			}
			char a=st.top();
			if(a=='('&&s[i]!=')' || a=='['&&s[i]!=']' || a=='<'&&s[i]!='>'){
				flag=0;
				break;
			}
			st.pop();
		}
	}
	if(!st.empty()) flag=0;
	if(flag) printf("Yes");
	else printf("No");
	
	return 0;
}
posted @ 2025-07-27 10:11  雨梦-H  阅读(22)  评论(0)    收藏  举报