[20] Paréntesis efectivos

Paréntesis válido

 


Titulo

Incluye solo un hecho (, ), {, }, [, ]cadena, determina si la cadena es válida.

Una cadena válida debe cumplir:

  1. El soporte izquierdo debe cerrarse con el mismo tipo de soporte derecho.
  2. El soporte izquierdo debe cerrarse en el orden correcto.

Tenga en cuenta que una cadena vacía puede considerarse una cadena válida.

Ejemplo 1:

输入: "()"
输出: true

Ejemplo 2

输入: "()[]{}"
输出: true

Ejemplo 3

输入: "(]"
输出: false

Ejemplo 4

输入: "([)]"
输出: false

Ejemplo 5:

输入: "{[]}"
输出: true

 


Prototipo de función

Prototipo de función C:

bool isValid(char * s){}

 


Juicio de límites

bool isValid(char * s){
    if( s == NULL || *s == '\0' )
        return true;
}

 


Diseño de algoritmo: pila

Ideas: Si usted tiene la mitad izquierda de los soportes (como por ejemplo (,, [) {en la pila, la mitad derecha de los soportes de la cara (como por ejemplo ),, ]) }y la parte superior de los elementos de la pila pueden igualar (es un par de paréntesis), entonces la pila, que se repite este Proceso ... Al final, la pila vacía es paréntesis válidos. Si todavía hay paréntesis en la pila, significa que no hay una coincidencia perfecta.

bool isValid(char * s){
	if( s == NULL || *s == '\0' )     // 题目说:空字符串可被认为是有效字符串。
        return true;
        
    int len = strlen(s);
    if ( !len ) return true;
    
    char stack[len];
    int top = -1;
    for (int i = 0; i < len; ++i) {
        if (top > -1 && ((stack[top] == '(' && s[i] == ')') || (stack[top] == '[' && s[i] == ']') || (stack[top] == '{' && s[i] == '}'))) {
            top--;
        } else {
            stack[++top] = s[i];
        }
    }

    return top == -1 ? true:false;
}

 


133 artículos originales publicados · Me gusta 378 · Visitas 70,000+

Supongo que te gusta

Origin blog.csdn.net/qq_41739364/article/details/105496589
Recomendado
Clasificación