Compruebe si una cadena es Palindrome en Java y Python

A lo largo de los años, comprobar si una cadena es un palíndromo o no se ha convertido en una pregunta clásica de una entrevista de codificación. Esto se debe a que involucra conceptos relacionados con la manipulación y comparación de cadenas e incluso bucles según la implementación. Y la pregunta no es extensa, por lo que se puede completar dentro de las limitaciones de tiempo de una entrevista. Este artículo incluye la implementación para verificar si una cadena es palíndromo en Java y Python.

¿Qué es un palíndromo?

Según sinónimo.com, la definición de palíndromo es "una palabra o frase que se lee igual al revés que al futuro". Básicamente, significa que si escribe la palabra o frase al revés, será exactamente igual que cuando estaba hacia adelante. Por ejemplo, papá y mamá son palíndromos y papá y mamá no lo son. La palabra "palíndromo" proviene de dos palabras de raíz griega, "palin" que significa de nuevo y "dromos" que significa camino o dirección. Fue acuñado por el dramaturgo inglés Ben Jonson en el siglo XVII.

Solución

  • La forma más común y fácil de resolver la pregunta es invirtiendo la cadena primero y luego comparándola con la cadena original. Este enfoque será O (n) en notación O grande porque la inversión de cadena es O (n).
  • Otra forma sería comenzar a comparar personajes desde el principio y el final y continuar hasta llegar al medio. Este enfoque tiene una complejidad de tiempo de O (n / 2) pero en notación de O grande seguirá siendo O (n). Pero la ventaja de este enfoque es que puede devolver False tan pronto como se encuentre con el primer desajuste, mientras que con el primer enfoque, dado que invertir una cadena es el primer paso, la complejidad del tiempo siempre será O (n).

Palíndromo en la implementación de Python

A continuación se muestra el código para verificar si una cadena es palíndromo en Python.

def is_palindrome (s): "" "Devuelve True si el argumento s dado es un palíndromo else False" "" assert (isinstance (s, str)), "El argumento s no es de tipo "# Confirmar si el argumento dado es de tipo return s [:: - 1] == s # Compara el reverso de la cadena consigo mismo si __name __ == "__ main__": print (is_palindrome ("papá"))def is_palindrome (palabra): "" "Compara los caracteres uno por uno desde el principio y el final y devuelve False cuando se produce la primera discrepancia o devuelve True" "" i1, i2 = 0, len (palabra) -1 # Inicializar los cursores mientras i2> i1: si palabra [i1]! = palabra [i2]: # Si los caracteres no coinciden, no es necesario continuar más devuelve Falso i1 + = 1 i2- = 1 devuelve Verdadero si __nombre __ == "__ principal__ ": print (is_palindrome (" papá "))

Implementación de Palindrome en Java

A continuación se muestra el código para verificar si una cadena es palíndromo en Java.

public class Palindrome {public static Boolean isPalindrome (String str) {StringBuilder sb = new StringBuilder (str); // StringBuilder tiene un método inverso return sb.reverse (). ToString (). Equals (str); // Compara el reverso de la cadena consigo mismo} public static void main (String args []) {Boolean b = isPalindrome ("papá"); System.out.println (b); }}public class Palindrome {public static Boolean isPalindrome (String str) {int i1 = 0; int i2 = str.length () - 1; while (i2> i1) {if (str.charAt (i1)! = str.charAt (i2)) {devolver falso; } i1 ++; i2--; } devuelve verdadero; } public static void main (String args []) {Boolean b = isPalindrome ("papá"); System.out.println (b); }}