¿Cómo verificar el número de palíndromo en Python?
Publicado: 2020-11-30Tabla de contenido
¿Qué es un palíndromo?
Un palíndromo es una palabra, un número o cualquier cadena de caracteres que se lee igual hacia atrás que hacia adelante.
Algunos ejemplos: detartrated, 1567651, 02/02/2020, Malayalam
Entonces, este artículo le muestra varias formas en que puede escribir un programa para verificar si una entrada dada es un palíndromo o no, usando Python.
Método 1:
La solución más ingenua que se me ocurre es invertir el número y comprobar si es igual al número de entrada. Se puede hacer de la siguiente manera:
numero = int(entrada());
inversa = 0
mientras número > 0:
dígito = número % 10
inversa = inversa * 10 + dígito
número = número // 10
si numero==inverso:
print(“¡es un palíndromo!”)
demás:
print(“¡no es un palíndromo!”)
Sin embargo, esto compromete la legibilidad del código y tiene más líneas de código de las necesarias. Consulte nuestro curso de ciencia de datos en línea para obtener más información.
Aquí hay una forma breve y fácil de verificar un número usando solo una línea.
Método 2:
El truco consiste en tomar el número de entrada como un tipo de datos str en lugar de int. Luego, puede usar la técnica de corte [::-1] para obtener el reverso de una cadena y verificar la igualdad en la declaración if .
numero = entrada()
si número == número[::-1]:
print(“¡es un palíndromo!”)
demás:
print(“¡no es un palíndromo!”)
Método 3:
Este es un método recursivo para verificar si una matriz es un palíndromo o no.
def esPalindrome(números, inicio, final):
si inicio >= final:
volver verdadero
if numeros[comienzo] == numeros[fin]:
return isPalindrome(numbers, start + 1, end – 1)
demás:
volver falso
numeros= lista(mapa(int, entrada().split()))
n=largo(números)
si esPalíndromo(números, 0, n-1):
print(“¡es un palíndromo!”)
demás:
print(“¡no es un palíndromo!”)
La función isPalindrome verifica si el primer y el último elemento de la matriz son iguales o no. Si no, la función inmediatamente devuelve False. De lo contrario, comprueba recursivamente los siguientes elementos extremos hasta que los dos punteros se encuentran en el medio.
Leer: Temas e ideas de proyectos de Python
Preguntas comunes de entrevistas de codificación relacionadas con palíndromos
#1 Subcadena palindrómica más larga
Dada solo una cadena como entrada, debe devolver la longitud de la subcadena palindrómica más larga de la cadena.
P.ej:
Entrada: 'acbcbabcc'
Salida: 5 ('cbabc')
Acercarse:
Si tratamos de relacionar esto con uno de los problemas más comunes de DP, la subcadena común más larga, aquí la diferencia es que solo se nos da una cadena de entrada mientras que LCS usa dos cadenas. Como sabemos que un palíndromo es exactamente igual a su reverso, podemos hacer que la segunda cadena sea el reverso de nuestra entrada dada.
Ahora esto se convierte exactamente en lo mismo que encontrar LCS.
def SubstrLC(A, B, m, n):
LCSub = [[0 para i en el rango (n+1)] para j en el rango (m+1)]
respuesta = 0
para i en el rango (m+1):
para j en el rango (n+1):
si (i == 0 o j == 0):
LCSub[i][j] = 0
elif A[i-1] == B[j-1]:
LCSub[i][j] = 1 + LCSub[i-1][j-1]
respuesta = max(respuesta, LCSub[i][j])

demás:
LCSub[i][j] = 0
volver y
str1 = entrada()
str2 = str1[::-1]
m = len(cadena1)
n = len(cadena2)
print('Longitud de la subcadena palindrómica más larga = ', LCSubstring(str1, str2, m, n))
Entonces, para la entrada anterior, obtenemos las dos cadenas como
'acbcbabcc' y
'ccbabcbca'
La subcadena común más larga se convierte en 'cbabc', que tiene una longitud de 5.
#2 Comprobar si un anagrama de una cadena es un palíndromo
Dada una cadena como entrada, debe verificar si algún anagrama de la cadena puede ser un palíndromo o no y devolver sí/no en consecuencia.
P.ej:
Entrada: 'pythonpython'
Salida: Sí
(si bien la cadena en sí no es un palíndromo, un posible anagrama 'pythonnohtyp' forma un palíndromo)
Entrada: 'harrypotter'
Salida: Sí
Acercarse:
Si te fijas bien, cada vez que tenemos una cadena palíndromo de longitud uniforme, todos los caracteres de la primera mitad se repiten en la segunda mitad. Esto significa que todos los caracteres presentes en la cadena aparecen un número par de veces.
Cuando la longitud es impar, todos los caracteres a la izquierda del elemento central (no inclusive) aparecen el mismo número de veces en el lado derecho del elemento central. Esto significa que solo hay un carácter que aparece un número impar de veces (elemento central) y todos los demás aparecen un número par de veces.
Con esta lógica, podemos almacenar el recuento de caracteres de la cadena en un hash y verificar estas restricciones para obtener la respuesta requerida.
RANGO_CARACTER = 256
str1 = entrada()
frecuencia = [0 para i en el rango (CHAR_RANGE)]
para i en str1:
freq[ord(i)] += 1 #ord(x) da el valor unicode de x
número_probabilidades = 0
para i en el rango (CHAR_RANGE):
si frecuencia[i] & 1:
núm_probabilidades += 1
si (núm_probabilidades > 1):
imprimir ("Sí")
demás:
imprimir ("No")
Conclusión
En conclusión, los problemas de palíndromo son muy comunes e interesantes. Son útiles para resolver varios acertijos matemáticos y preguntas de programación competitiva.
Si tiene curiosidad por aprender sobre ciencia de datos, consulte el Programa ejecutivo PG en ciencia de datos de IIIT-B y upGrad, creado para profesionales que trabajan y ofrece más de 10 estudios de casos y proyectos, talleres prácticos, tutoría con expertos de la industria, 1 -on-1 con mentores de la industria, más de 400 horas de aprendizaje y asistencia laboral con las mejores empresas.
¿Cuál es la complejidad temporal del programa Palindrome?
El número de operaciones elementales realizadas por el método a menudo se usa para estimar la complejidad del tiempo, asumiendo que cada proceso elemental requiere una cantidad determinada de tiempo para completarse. La complejidad temporal de determinar si un número es o no un palíndromo es O(log10(n)). Cuando verificamos que los valores sean un palíndromo, dividimos el número o valor por diez en cada iteración. Como resultado, la complejidad temporal es igual al número de dígitos en un número.
¿En qué se diferencia / del operador // en Python?
Cuando usamos el operador de división, es decir, una sola barra inclinada (/) en Python, el compilador simplemente divide los dos valores en los lados derecho e izquierdo de la barra inclinada. Pero cuando usamos doble barra (//), es decir, división mínima, le pedimos al compilador que realice el proceso típico de división, pero el resultado que arroja es el entero más grande posible cercano a la respuesta. Este entero es menor o igual que el resultado de la división normal.
¿Cuál es el salario de nivel de entrada de un desarrollador de Python?
Es un hecho bien conocido que Python se usa ampliamente en la mayoría de las industrias y empresas, lo que convierte a Python en el segundo lenguaje informático mejor pagado. Python es también el lenguaje de programación favorito entre estudiantes y profesionales porque es fácil de aprender y es muy flexible. El salario de nivel de entrada de un desarrollador de Python en India es de alrededor de INR 4,27,293 por año en promedio. Los profesionales que aprenden Python tienen muchas posibilidades, ya que Python también se usa en otros campos, como la ciencia de datos y el aprendizaje automático.