Lectura
Palíndromo válido (Java, Python, PHP, C++, JavaScript)
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 un string se busca saber si es palíndromo, si es así, retorna true, si no, false
En el ejemplo se puede apreciar, que el valor de la primera frase, se lee igual hacia adelante y hacia atrás, en cambio, la segunda frase no.
Explicación del ejercicio Paso por paso
Código de la solución
Java
class Solution {
public boolean isPalindrome(String s) {
int left = 0;
int right = s.length() - 1;
while (left < right) {
while (left < right && !Character.isLetterOrDigit(s.charAt(left))) {
left++;
}
while (left < right && !Character.isLetterOrDigit(s.charAt(right))) {
right--;
}
if (Character.toLowerCase(s.charAt(left)) != Character.toLowerCase(s.charAt(right))) {
return false;
}
left++;
right--;
}
return true;
}
}
Python
class Solution(object):
def isPalindrome(self, s):
left = 0
right = len(s) - 1
while left < right:
while left < right and not s[left].isalnum():
left += 1
while left < right and not s[right].isalnum():
right -= 1
if s[left].lower() != s[right].lower():
return False
left += 1
right -= 1
return True
PHP
class Solution {
/**
* @param String $s
* @return Boolean
*/
function isPalindrome($s) {
$left = 0;
$right = strlen($s) - 1;
while ($left < $right) {
while ($left < $right && !ctype_alnum($s[$left])) {
$left++;
}
while ($left < $right && !ctype_alnum($s[$right])) {
$right--;
}
if (strtolower($s[$left]) !== strtolower($s[$right])) {
return false;
}
$left++;
$right--;
}
return true;
}
}
C++
class Solution {
public:
bool isPalindrome(string s) {
int left = 0;
int right = s.length() - 1;
while (left < right) {
while (left < right && !isalnum(s[left])) {
left++;
}
while (left < right && !isalnum(s[right])) {
right--;
}
if (tolower(s[left]) != tolower(s[right])) {
return false;
}
left++;
right--;
}
return true;
}
};
JavaScript
/**
* @param {string} s
* @return {boolean}
*/
var isPalindrome = function(s) {
let left = 0;
let right = s.length - 1;
while (left < right) {
while (left < right && !/[a-zA-Z0-9]/.test(s[left])) {
left++;
}
while (left < right && !/[a-zA-Z0-9]/.test(s[right])) {
right--;
}
if (s[left].toLowerCase() !== s[right].toLowerCase()) {
return false;
}
left++;
right--;
}
return true;
};
Si te gustó el contenido, ¡visita mi canal de YouTube para ver más explicaciones sobre algoritmos y estructuras de datos!