Guía avanzada para la competencia de algoritmos --- 0x18 (Stack) Bracket Painter

Tema

Inserte la descripción de la imagen aquí

responder

  1. La mayoría de las preguntas de emparejamiento de corchetes están relacionadas con la pila. Una secuencia de corchetes perfecta siempre coincide completamente con los corchetes izquierdo y derecho, por lo que si una secuencia de corchetes es una secuencia perfecta, la pila debe estar vacía después de escanear.
  1. En esta pregunta, buscamos la secuencia perfecta más larga en una secuencia, luego colocamos el paréntesis izquierdo en la pila, y cuando encontramos el paréntesis derecho, juzgamos si puede coincidir con el paréntesis superior de la pila, si no, empujaremos la pila y actualizaremos la coincidencia máxima cada vez.

Código

#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<algorithm>
#include<stack>


using namespace std;
const int N = 1e5 + 10;

char str[N];

int main() {
    
    

    cin >> str;
    int n = strlen(str);
    int res = 0;
    stack<int> stk;
    for (int i = 0; i < n; i++) {
    
    
        if (stk.size()) {
    
    
            char c1 = str[i];
            char c2 = str[stk.top()];
            if ((c1 == ')' && c2 == '(') || (c1 == '}' && c2 == '{') || (c1 == ']' && c2 == '[')) {
    
    
                stk.pop();
            } else {
    
    
                stk.push(i);
            }
        } else {
    
    
            stk.push(i);
        }
        if (stk.size()) res = max(res, i - stk.top());
        else res = max(res, i + 1);
    }
    cout << res << endl;

    return 0;
}


Supongo que te gusta

Origin blog.csdn.net/qq_44791484/article/details/113851057
Recomendado
Clasificación