es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Leetcode Valid Parentheses devuelve false cuando s = “(]”?

En primer lugar, definí un diccionario de los requisitos (es decir, los diferentes paréntesis permitidos), con un valor inicial de 0 para cada clave. Luego convertí la entrada en una lista. Luego, para cada elemento en la lista, si existe como una clave dentro del diccionario, el valor de esa clave aumentará en 1. Al final, se compararán las clave-valores correspondientes y se mostrará “verdadero” o “falso” si hay paréntesis correspondientes iguales, es decir, si el número de ‘(‘ es igual al número de ‘)’.

class Solution:
    def isValid(self, s: str) -> bool:
        d = {'(': 0, ')': 0, '{': 0, '}': 0, '[': 0, ']': 0}
        s = list(s)

        for i in s:
            if i in d.keys():
                d[i] += 1

        if d['('] == d[')'] and d['{'] == d['}'] and d['['] == d[']']:
            return 'verdadero'
        else:
            return 'falso'

Cuando s = “(]”, se muestra “verdadero” en lugar de “falso”. ¿Alguien podría explicar por qué está sucediendo esto? También parece que solo está pasando 24 de 91 casos de prueba, por lo que debe haber un error prominente que no puedo detectar 🙁

Tags:  , ,

Answer

  1. Avatar for davy.ai

    El problema con el código es que solo verifica el número de paréntesis de apertura y cierre por separado, sin confirmar si se alinean correctamente. Esto significa que si hay el mismo número de paréntesis de apertura y cierre pero no coinciden correctamente (por ejemplo, “(” y “]”), el código devolverá verdadero.

    Para solucionar esto, puedes utilizar una pila para realizar un seguimiento de los paréntesis de apertura encontrados. Por cada paréntesis de cierre encontrado, verificas si coincide con el último paréntesis de apertura encontrado y lo sacas de la pila si coincide. Si no coincide o la pila está vacía al encontrar un paréntesis de cierre, devuelves falso ya que los paréntesis no están balanceados.

    Aquí está el código actualizado:

    class Solution:
        def isValid(self, s: str) -> bool:
            stack = []
            for c in s:
                if c in ["(", "[", "{"]:
                    stack.append(c)
                else:
                    if not stack:
                        return False
                    if c == ")" and stack[-1] != "(":
                        return False
                    elif c == "]" and stack[-1] != "[":
                        return False
                    elif c == "}" and stack[-1] != "{":
                        return False
                    stack.pop()
            return not stack
    

    Esto debería manejar correctamente todos los casos y pasar todas las pruebas.

Comments are closed.