🧩 Desafio: Verificar se uma string é um palíndromo
Enunciado:
Escreva uma função que recebe uma string e retorna true se ela for um palíndromo e false caso contrário.
✅ Regras
- Deve ignorar espaços em branco
- Deve ignorar pontuações
- Deve ignorar diferença entre maiúsculas e minúsculas
Exemplos:
"A man, a plan, a canal: Panama" → true
"OpenAI" → false
💡 Minha abordagem
- Normalizar a string de entrada
- Remover caracteres que não são relevantes (espaços, vírgulas, pontos, etc.).
- Transformar tudo em minúsculas para ignorar a diferença entre maiúsculas e minúsculas.
- Gerar a string invertida
- Eu queria comparar a string normal com ela de trás pra frente.
- No começo pensei em transformar a string em array “na mão”, usando
split de formas diferentes.
- Depois lembrei do spread operator (
[...string]) e também pesquisei na documentação e encontrei o método reverse(), que já resolve a inversão do array de forma bem simples.
- Comparar original normalizada vs. invertida
- Se as duas forem iguais, é um palíndromo → retorno
true.
- Caso contrário → retorno
false.
🔧 Código final (versão melhorada)
function isPalindrome(s) {
// 1. Normalizar: tudo minúsculo e remover caracteres não alfanuméricos
const normalized = s
.toLowerCase()
.replace(/[^a-z0-9]/g, ''); // mantém só letras e números
// 2. Inverter a string normalizada
const reversed = [...normalized].reverse().join('');
// 3. Comparar
return normalized === reversed;
}
🆚 Diferenças em relação à minha primeira solução