Categorías
Algorithms

LeetCode – Palíndromo válido (Java)

Dada una cadena, determine si es un palíndromo, considerando solo caracteres alfanuméricos e ignorando los casos.

Por ejemplo, "Red rum, sir, is murder" es un palíndromo, mientras que "Programcreek is awesome" no es.

Nota:
¿Ha considerado que la cadena podría estar vacía? Esta es una buena pregunta para hacer durante una entrevista.

A los efectos de este problema, definimos una cadena vacía como palíndromo válido.

Solución Java

Hay varias formas diferentes de resolver este problema. La siguiente es una solución con O (n) complejidad temporal y O (1) complejidad espacial.

public boolean isPalindrome(String s) {
    if(s==null){
        return false;
    }
 
    s = s.toLowerCase();
 
    int i=0;
    int j=s.length()-1;
 
    while(i<j){
        while(i<j && !((s.charAt(i)>='a' && s.charAt(i)<='z') 
                    || (s.charAt(i)>='0'&&s.charAt(i)<='9'))){
            i++;
        }
 
        while(i<j && !((s.charAt(j)>='a' && s.charAt(j)<='z') 
                    || (s.charAt(j)>='0'&&s.charAt(j)<='9'))){
            j--;
        }
 
        if(s.charAt(i) != s.charAt(j)){
            return false;
        }
 
        i++;
        j--;
    }
 
    return true;
}

Por Programación.Click

Más de 20 años programando en diferentes lenguajes de programación. Apasionado del code clean y el terminar lo que se empieza. ¿Programamos de verdad?

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *