tema
texto
Dada una cadena, verifique si es un palíndromo, considere solo letras y números e ignore el caso de las letras.
Explicación: En esta pregunta, definimos una cadena vacía como una cadena palíndromo válida.
Ejemplo 1:
Entrada: "Un hombre, un plan, un canal: Panamá"
Salida: verdadero
Ejemplo 2:
Entrada: "competir con un coche"
Salida: falso
Fuente: LeetCode
plantilla
bool isPalindrome(char * s){
}
Resolución de problemas
análisis
El palíndromo en el título solo se verifica paraNúmeros y letrasEl juicio palíndromo. Por lo tanto, es necesario eliminar los símbolos y otros elementos irrelevantes. Definir el índice del último elemento para comparar.
int n = strlen(str) - 1;
Al mismo tiempo, para el cruce de elementos, que es el primer elemento de adelante hacia atrás, simplemente use el recorrido ordinario y la longitud del recorridoNo puede ser como un simple palíndromo de juicio n / 2, Debido a que no sabemos dónde está la parte efectiva de los elementos internos, necesitamosAtravesar hasta el último elemento. Al mismo tiempo, se comprueba el elemento y se omite el elemento si no está satisfecho.
for (int i = 0; i <= n;) {
if (!isalnum(str[i])) {
i++;
continue;
}
if (!isalnum(str[n])) {
n--;
continue;
}
}
Luego es la verificación de los elementos correspondientes antes y después, si no se cumple la condición del palíndromo se devuelve falso.
if (tolower(str[i]) != tolower(str[n]))
return false;
Código completo
bool isPalindrome(char *str)
{
int n = strlen(str) - 1;
for (int i = 0; i <= n;) {
if (!isalnum(str[i])) {
i++;
continue;
}
if (!isalnum(str[n])) {
n--;
continue;
}
if (tolower(str[i]) != tolower(str[n]))
return false;
i++;
n--;
}
return true;
}