Programa en C++ para verificar si una string determinada es Palindrome o no

Dada una string S que consta de N caracteres del alfabeto inglés, la tarea es verificar si la string dada es un palíndromo . Si la string dada es un palíndromo, imprima » «. De lo contrario, escriba “ No ”.

Nota: Se dice que una cuerda es palíndromo si el reverso de la cuerda es el mismo que la cuerda. 

Ejemplos:

Entrada: S = “ABCDCBA”
Salida:
Explicación:
El reverso de la string dada es igual a (ABCDCBA) que es igual a la string dada. Por lo tanto, la string dada es palíndromo.

Entrada: S = «GeeksforGeeks»
Salida: No
Explicación: 
El reverso de la string dada es igual a (skeeGrofskeeG) que no es igual a la string dada. Por lo tanto, la string dada no es un palíndromo.

Enfoque ingenuo: el enfoque más simple para usar la función inversa incorporada en el STL . Siga los pasos a continuación para resolver el problema:

  • Copie la string S en otra string, digamos P, y luego invierta la string S.
  • Ahora verifique si la string S es igual a la string P y luego imprima » «. De lo contrario, escriba “ No ”.

A continuación se muestra la implementación del enfoque anterior:

C++

// C++ program for the above approach
#include <bits/stdc++.h>
using namespace std;
 
// Function to check whether
// the string is palindrome
string isPalindrome(string S)
{
    // Stores the reverse of the
    // string S
    string P = S;
 
    // Reverse the string P
    reverse(P.begin(), P.end());
 
    // If S is equal to P
    if (S == P) {
        // Return "Yes"
        return "Yes";
    }
    // Otherwise
    else {
        // return "No"
        return "No";
    }
}
 
// Driver Code
int main()
{
    string S = "ABCDCBA";
    cout << isPalindrome(S);
 
    return 0;
}
Producción

Yes

Complejidad temporal: O(N)
Espacio auxiliar: O(N)

Enfoque eficiente: el enfoque anterior se puede optimizar en la complejidad del espacio recorriendo la string y verificando si el carácter en el i -ésimo índice es igual al carácter en el (Ni-1) -ésimo índice para cada índice en el rango [0, N/ 2] . Siga los pasos a continuación para resolver el problema:

  • Iterar sobre el rango [0, N/2] , usando la variable i y en cada iteración verificar si el carácter en el índice i y Ni-1 no son iguales, luego imprimir » No » y romper .
  • Si ninguno de los casos anteriores satisface, imprima » «.

A continuación se muestra la implementación del enfoque anterior:

C++

// C++ program for the above approach
#include <bits/stdc++.h>
using namespace std;
 
// Function to check whether string
// is palindrome
string isPalindrome(string S)
{
    // Iterate over the range [0, N/2]
    for (int i = 0; i < S.length() / 2; i++) {
 
        // If S[i] is not equal to
        // the S[N-i-1]
        if (S[i] != S[S.length() - i - 1]) {
            // Return No
            return "No";
        }
    }
    // Return "Yes"
    return "Yes";
}
 
// Driver Code
int main()
{
    string S = "ABCDCBA";
    cout << isPalindrome(S);
 
    return 0;
}
Producción: 

Yes

 

Complejidad temporal: O(N)
Espacio auxiliar: O(1)

Publicación traducida automáticamente

Artículo escrito por siddharth_25 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *