Desafio do Palíndromo com Javascript

Palíndromo, segundo a Wikipedia, é uma palavra , frase ou número, que lida do começo ao fim ou do fim ao começo, produz o mesmo resultado (ex: arara, radar, reviver). Na programação o desafio consiste em inverter a string e compará-la com a original, ignorando espaços, pontuações e letras maiúsculas/minúsculas.

Hoje, demonstrarei o desafio com uma abordagem em javascript, posteriormente abordarei com outras linguagens e de maneiras diferentes. Como exemplo, usarei a seguinte frase:

Socorram-me, subi no ônibus em Marrocos!

Primeiro, peguei a frase acima e a coloquei numa constante:

const texto = "Socorram-me, subi no ônibus em Marrocos";

Depois, usei a função normalize, com o parâmetro “NFD”, para separar as letras dos acentos . Ex: “á” vira “a” + ”´”. E assim, apliquei um replace para remover os acentos separados.

const formatado = texto.normalize('NFD').replace(/\p{Diacritic}/gu, ''));
// O código acima produz isso: 'Socorram-me, subi no onibus em Marrocos'

Com o texto sem os acentos, basta remover os espaços mantendo apenas números e letras, aplicando um toLowerCase.

const formatado = texto.normalize('NFD')
    .replace(/\p{Diacritic}/gu, ''))
    .replace(/[^a-zA-Z0-9]/g, '')
    .toLowerCase(); 
// O código acima produz: 'socorrammesubinoonibusemmarrocos'

Agora que tenho o texto tratado, armazenado na variável “formatado”, vou usar o seu conteúdo para inverter a string, para então fazer a comparação entre as 2:

const invertida = formatado
    .split("")
    .reverse()
    .join("");
// O código acima também produz: 'socorrammesubinoonibusemmarrocos'

Adicionei um split para dividir essa string e retornar um array, depois um reverse para inverter o array retornado e, finalmente, um join, para retornar esse array como string. Pronto! O código completo fica assim:

const texto = "arara"

const formatado = texto
    .normalize('NFD') 
    .replace(/\p{Diacritic}/gu, '') 
    .replace(/[^a-zA-Z0-9]/g, '')
    .toLowerCase(); 

const invertida = formatado
    .split("")
    .reverse()
    .join("");

if(formatado === invertida) {
    console.log('É palíndromo.');
} else {
    console.log('Não é palíndromo.');
}
// 'É palíndromo.'
const texto = "código"

const formatado = texto
    .normalize('NFD') 
    .replace(/\p{Diacritic}/gu, '') 
    .replace(/[^a-zA-Z0-9]/g, '')
    .toLowerCase(); 

const invertida = formatado
    .split("")
    .reverse()
    .join("");

if(formatado === invertida) {
    console.log('É palíndromo.');
} else {
    console.log('Não é palíndromo.');
}
// 'Não é palíndromo.'

E, é isso! Obrigado e, até a próxima postagem!

© 2025 Breno S. de Alcântara. Todos os direitos reservados.