Validez de cadenas entre corchetes

Validez de cadenas entre corchetes

Descripción del Título

Dada una cadena str, juzgue si es una cadena de corchetes válida general (la validez general: es decir, hay un esquema de coincidencia de corchetes, de modo que cada carácter de corchete puede encontrar el corchete inverso correspondiente, y la cadena no contiene no paréntesis personaje).

Ingrese una descripción:

La entrada contiene una línea, que representa str (1 ≤ lengthstr ≤ 1 0 5) str (1 \ leq length_ {str} \ leq 10 ^ 5)s t r ( 1l e n g t hs t r1 05 )

Descripción de salida:

Imprima una línea, si str es una cadena de corchetes válida, envíe "YES", de lo contrario, envíe "NO".

Ejemplo 1
entrar
(())
Salida
YES
Ejemplo 2
entrar
()a()
Salida
NO
Descripción
()a()中包含了 ‘a’,a不是括号字符
Observaciones:

Complejidad temporal O (n) O (n)O ( n ) , complejidad espacial adicionalO (1) O (1)O ( 1 )


responder:

Escanee de adelante hacia atrás, use un contador para registrar el número de paréntesis izquierdos y regrese directamente si encuentra un carácter que no sea paréntesis; de lo contrario, el contador aumentará en uno cuando encuentre un paréntesis izquierdo. Cuando se encuentre un paréntesis derecho, si el número de paréntesis izquierdos es igual a 0, es ilegal. Simplemente regrese directamente, de lo contrario, el número de paréntesis izquierdos se reduce en uno, lo que significa que se emparejan un montón de paréntesis.

Código:
#include <cstdio>
#include <cstring>

using namespace std;

int main(void) {
    
    
    char ch;
    int left = 0;
    while ((ch = getchar()) != '\n') {
    
    
        if (ch != '(' && ch != ')') return 0 * puts("NO");
        if (ch == ')' && --left < 0) {
    
    
            return 0 * puts("NO");
        } else if (ch == '(') ++left;
    }
    puts(left ? "NO" : "YES");
    return 0;
}

Supongo que te gusta

Origin blog.csdn.net/MIC10086/article/details/108902270
Recomendado
Clasificación