Implementação de deque aqui
O seguinte algoritmo usa uma deque para resolver se uma string é um palíndromo:
function palindromeChecker(aString) {
if (!aString) return false;
const deque = new Deque();
const lowerStr = sString.toLowerCase().split(' ').join('');
let isEqual = true;
let firstChar, lastChar;
for (let i = 0; i < lowerStr.length; i++) {
deque.addBack(lowerStr[i]);
}
while (deque.size() > 1 && isEqual) {
firstChar = deque.removeFront();
lastChar = deque.removeBack();
if (firstChar !== lastChar) isEqual = false;
return isEqual;
}
}
-
Se a string passada como argumento é inválida (undefined, null, ou vazia), a função retorna imediatamente
false
. -
Criamos uma deque;
-
Removemos espaços vazios e deixamos todas as letras em caixa baixa;
-
Enfileiramos todos os caracteres da string na deque;
-
Enquanto há elementos na deque, removemos da deque o primeiro e o último elemento, comparamos um com o outro e caso sejam iguais o processo se repete, caso contrário a string não é palíndroma, o loop while é terminado e a função retorna
false
. Caso a string seja um palíndromo, a variávelisEqual
permanecetrue
e é retornada pela função.
Exemplo:
console.log(palindromeChecker('a')); // true
console.log(palindromeChecker('aa')); // true
console.log(palindromeChecker('kayak')); // true
console.log(palindromeChecker('level')); // true
console.log(palindromeChecker('Was it a car or a cat I saw')); // true
console.log(palindromeChecker('Step on no pets')); // true