[Una pregunta por día] 18: Verificar el palíndromo

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:

  1. Recorre la cadena desde el principio y el final de la cadena al mismo tiempo

  2. Primero determine si el carácter en esta posición de la cadena es un carácter alfanumérico (escriba una función)

  3. 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

  4. 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
Inserte la descripción de la imagen aquí


Si tiene opiniones diferentes, deje un mensaje para discutir ~

152 artículos originales publicados · 45 elogiados · 10,000+ vistas

Supongo que te gusta

Origin blog.csdn.net/AngelDg/article/details/105047183
Recomendado
Clasificación