Descripción del título
Dada una cadena, verifique que sea una cadena de palíndromo, considerando solo caracteres alfabéticos y numéricos, puede ignorar el caso de las letras.
Explicación: En esta pregunta, definimos una cadena vacía como una cadena de palíndromo válida.
Ejemplo 1:
Entrada: "Un hombre, un plan, un canal: Panamá"
Salida: verdadero
Ejemplo 2
Entrada: "correr un auto"
Salida: falso
Ideas:
-
Recorre la cadena desde el principio y el final de la cadena al mismo tiempo
-
Primero determine si el carácter en esta posición de la cadena es un carácter alfanumérico (escriba una función)
-
Si es así, guarde el subíndice y salte del bucle (en este proceso, las letras mayúsculas y minúsculas se ordenan de manera uniforme); de lo contrario, omita este carácter y detecte el siguiente carácter
-
Determine si la cadena es un palíndromo comparando los caracteres correspondientes a los subíndices antes y después
El código es el siguiente:
bool IsNumber(char c){
return (c >= '0' && c <= '9') || (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z');
}
class Solution {
public:
bool isPalindrome(string s) {
if(s.empty())
return true;
int start = 0;
int end = s.size() - 1;
while(start < end){
while(start != end){
if(IsNumber(s[start])){
if((s[start] >= 'A' && s[start] <= 'Z')){
s[start] += 32;
}
break;
}
++start;
}
while(start != end){
if(IsNumber(s[end])){
if((s[end] >= 'A' && s[end] <= 'Z')){
s[end] += 32;
}
break;
}
--end;
}
if(s[start] == s[end]){
++start;
--end;
}
else{
return false;
}
}
return true;
}
};
//验证代码
int main() {
Solution S;
string str;
getline(cin, str);
if(S.isPalindrome(str))
cout << "true" << endl;
else
cout << "false" << endl;
return 0;
}
Diagrama de generación de código
Si tiene opiniones diferentes, deje un mensaje para discutir ~