ABC394D
一个非常经典的套路是把所有括号从左到右压入栈中,如果栈顶能与当前的配对则消去。这样做符合题目中只能消除相邻括号的要求,并保证能消除的立刻消除,从而是正确的。最后判断栈是否为空即可。
时间复杂度 \(O(n)\)。
#include <iostream>
#include <cstdio>
using namespace std;
int a[2000001],tp;
int main()
{
string s;
int n;
cin >> s;
n = s.size();
for( int i = 0 ; i < n ; i ++ )
{
if( tp == 0 )
{
a[++ tp] = i;
continue;
}
if( s[a[tp]] == '(' && s[i] == ')' ) tp --;
else if( s[a[tp]] == '[' && s[i] == ']' ) tp --;
else if( s[a[tp]] == '<' && s[i] == '>' ) tp --;
else a[++ tp] = i;
}
if( tp == 0 ) cout << "Yes";
else cout << "No";
return 0;
}

浙公网安备 33010602011771号