题目大意
其实就是括号匹配,经典问题了。不过需要注意,这里只有连续的两个括号才能配对,例如 (<>)
是合法的,但 <(>)
不合法。
思路
和原括号匹配一样,我们使用一个栈,如果当前括号为左括号,则直接入栈,否则将其与栈顶字符进行匹配。最好记得查看栈是否为空。
代码参考
// 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;
}