String leetcode 20 paréntesis válidos

Pregunta: char * stack = (char *) malloc (sizeof (char) * (len + 1)) ;, ¿no entiendes por qué?

Tema: paréntesis válidos

Dada una cadena que solo incluye '(', ')', '{', '}', '[', ']', juzgue si la cadena es válida.

Una cadena válida debe satisfacer: el
paréntesis izquierdo debe cerrarse con el mismo tipo de paréntesis derecho.
El paréntesis de apertura debe cerrarse en el orden correcto.
Tenga en cuenta que una cadena vacía se puede considerar una cadena válida.

Ejemplo 1:
Entrada: "()"
Salida: verdadera

Ejemplo 2:
Entrada: “() [] {}”
Salida: verdadero

Ejemplo 3:
Entrada: "(]"
Salida: falso

Ejemplo 4:
Entrada: "([)]"
Salida: falso

Ejemplo 5:
Entrada: "{[]}"
Salida: verdadera

Fuente: LeetCode
Enlace: https://leetcode-cn.com/problems/valid-parentheses

solución python3

class Solution:
    def isValid(self, s: str) -> bool:
        s1=s.replace("()","").replace("[]","").replace("{}","")
        # 受力扣圈友启发,感谢.
        # 如果s的长度没变,,说明替代没发生,要不替代完了,要么是false
        while(len(s1)<len(s)):
            # 更新s,否则s一直没变化.
            s=s1
            # 把s括号中的(){}[]提成空字符串
            s1=s.replace("()","").replace("[]","").replace("{}","")

        return not len(s1)

Resumen: No hay bucle do while en python3, solo se puede escribir como se indicó anteriormente.

solución de lenguaje c

bool isValid(char * s){
    
    
    // if (s == NULL || s[0] == '\0') return true;
    int top=0;
    int len=0;
    int i=0;
    //算出s字符串的长度
    len=strlen(s);//求出字符串s的长度
    char *stack = (char *) malloc(sizeof(char) * (len+1));//多申请一个空间,因为字符串结尾\0还占一个字节,少了数组越界,看见大佬有的只申请1/2的思想非常棒
    for(i=0;i<len;i++){
    
    
        //如果是左边类型括号就进栈.
        if(s[i]=='['||s[i]=='('||s[i]=='{')
            stack[++top]=s[i];
        //如果是右边括号就出栈
        if(s[i]==']'){
    
    
            if(stack[top]=='[')
                top--;
            else 
                return false;
            }
        if(s[i]==')'){
    
    
            if(stack[top]=='(')
                top--;
            else 
                return false;
                }
        if(s[i]=='}'){
    
    
            if(stack[top]=='{')
                top--;
            else 
                return false;
                }        
    }
    //判断栈是不是空
    if(top!=0){
    
    
        free(stack);
        return false;
        }
    else{
    
    
        free(stack);
        return true;
        }
}

para resumir:

Usando la idea de la pila, cuando encuentre el paréntesis derecho, saldrá de la pila y el paréntesis izquierdo se colocará en la pila.

suplemento:

#include<stdio.h>
#include<string.h> 
int main() {
    
    
    char *s = "hehe";
    int len = strlen(s);
    printf("%d\n",len); //4
    //字符串是无符号的,运算时候会把-7看成大于的0的数
    printf("%d\n",strlen(s)-7>0); //1
    return 0;
}

Supongo que te gusta

Origin blog.csdn.net/mogbox/article/details/112743988
Recomendado
Clasificación