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; } |