Cadena 5 fácil de verificar el palíndromo Palíndromo válido

Una frase es un palíndromo si, después de convertir todas las letras mayúsculas en minúsculas y eliminar todos los caracteres no alfanuméricos, se lee igual hacia adelante y hacia atrás. Los caracteres alfanuméricos incluyen letras y números.

Dada una cadena s, devuelve verdadero si es un palíndromo, o falso en caso contrario.

class Solution(object):
    def isPalindrome(self, s):
        """
        :type s: str
        :rtype: bool
        """
        s = ''.join(e for e in s if e.isalnum()).lower()
        return s==s[::-1]
class Solution(object):
    def isPalindrome(self,s):
        sgood ="".join(ch.lower() for ch in s if ch.isalnum()) 
        return s== s[::-1]

La idea básica de esta solución es extraer primero todas las letras y números de la cadena de entrada y convertir todos los caracteres a minúsculas. Luego, use el operador de división de Python [::-1]para generar el orden inverso de la cadena y luego compare si la cadena original y la cadena invertida son iguales. Si son iguales, la cuerda es un palíndromo.

La complejidad temporal de esta solución es O(n), donde n es la longitud de la cadena . Esto se debe a que necesitamos recorrer toda la cadena una vez para extraer todas las letras y números, y recorrer toda la cadena nuevamente para comparar la cadena original y la cadena invertida. Su complejidad espacial también es O(n), porque necesitamos almacenar las letras y números extraídos.

La función de esta línea es procesar la cadena de entrada. Primero, usa una lista de comprensión para producir una lista que contiene solo las letras y los números en la cadena original (pasa la verificación ). Luego, la función concatena todos los caracteres de esta lista en una nueva cadena. Finalmente, la función convierte todas las letras mayúsculas en la nueva cadena a minúsculas. De esta forma, obtenemos una cadena que contiene solo letras minúsculas y números , que se pueden usar para determinar si se trata de un palíndromo. e.isalnum()''.join().lower()

sgood = "".join(ch.lower() for ch in s if ch.isalnum()) Explique este código

sLa función de este código es procesar la cadena de entrada para generar una nueva cadena sgood, que solo contiene sletras y números, y todas las letras mayúsculas se convierten en minúsculas. Aquí hay una explicación paso a paso:

  • for ch in s: Este es un bucle for que atraviesa scada carácter de la cadena ch.
  • if ch.isalnum(): Este es un juicio condicional, solo cuando chse trata de una letra o un número ( isalnum()la función significa "es alfanumérico", es decir, juzgar si un carácter es una letra o un número) realizará operaciones posteriores.
  • ch.lower(): Esta es una operación que convierte letras mayúsculas a minúsculas. Para caracteres no alfabéticos, lower()la función no tiene efecto.
  • "".join(): Esta es una función que conecta todos los caracteres previamente procesados ​​para generar una nueva cadena. Esta función combinará cada elemento (en este caso, caracteres) dentro de los corchetes en una cadena sin ninguna separación entre elementos.

Entonces, el significado de este código es, para scada carácter en la cadena, si es una letra o un número, convertirlo a minúsculas (si es una letra mayúscula), y luego concatenar todos estos caracteres para generar una nueva cadena sgood.

Explicación del concepto:

Lista de comprensión:

Las listas de comprensión (también conocidas como listas de comprensión ) proporcionan una forma concisa de crear listas.

Se estructura encerrando una expresión entre corchetes , seguida de una declaración for, seguida de cero o más declaraciones for o if. Esa expresión es arbitraria, lo que significa que puede poner cualquier tipo de objeto en la lista . El resultado devuelto será una nueva lista , generada después de que se haya ejecutado la expresión en el contexto de las declaraciones if y for .

El orden de ejecución de la lista de comprensión: cada declaración es una relación anidada , la segunda declaración a la izquierda es la capa más externa, y va un nivel a la derecha a su vez, y la primera declaración a la izquierda es el último nivel.

[x*y para x en el rango (1,5) si x > 2 para y en el rango (1,4) si y < 3]

Su orden de ejecución es:

para x en el rango (1,5) 
    si x > 2 
        para y en el rango (1,4) 
            si y < 3 
                x*y

Las listas de comprensión (también conocidas como listas de comprensión) proporcionan una forma concisa de crear listas. Se estructura encerrando una expresión entre corchetes, seguida de una fordeclaración, seguida de cero o más declaraciones foro . ifEsa expresión es arbitraria, lo que significa que puede poner cualquier tipo de objeto en la lista. El resultado devuelto será una nueva lista, producida después de que se haya ejecutado la expresión en el contexto de la instrucción ify .for

especificación

variable = [out_exp for out_exp in input_list if out_exp == 2]

Aquí hay otro ejemplo conciso:

múltiplos = [i para i en el rango (30) si i % 3 es 0]

imprimir (múltiplos)

# Salida: [0, 3, 6, 9, 12, 15, 18, 21, 24, 27]

Esto será muy útil para generar listas rápidamente. Algunas personas incluso prefieren usarlo en lugar de filterla función . La comprensión de listas es increíble en algunas situaciones, especialmente cuando necesita usar forun ciclo para generar una nueva lista . Por ejemplo, normalmente harías:

al cuadrado = []

para x en el rango (10):

al cuadrado.añadir(x**2)

Puedes simplificarlo usando listas de comprensión, así:

al cuadrado = [x**2 para x en el rango (10)]

Supongo que te gusta

Origin blog.csdn.net/sinat_37574187/article/details/131388133
Recomendado
Clasificación