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;
}
posted @ 2025-09-08 18:46  FormulaOne  阅读(12)  评论(0)    收藏  举报