Palindrome Permutation
Dado uma string, escreva uma função para checar se a string é uma permutation de um palíndromo.
Um palíndromo é uma palavra ou frase ou sentença que permanece igual quando lida de trás para frente.
A permutação é um rearranjo das letras.
O palíndromo não precisa ser limitado a apenas palavras do dicionário. Exemplo:
Dicas
- Você não precisa (e nem deve) gerar todas as permutações possíveis
- Que características teria uma string que é uma permutação de um palíndromo?
- Você já tentou uma tabela hash? Você conseguiria reduzir a complexidade para O(N)?
Solução
function isMod (input) {
return input % 2 === 0
}
function incremet (input) {
return input + 1
}
function isEmpty (input) {
return input === ' '
}
function assoc (map, key) {
map[key] = 1
}
function updateOddQuantity (input, oddQuantity) {
if (isMod(input)) {
return oddQuantity - 1
}
return oddQuantity + 1
}
function palindrome (input) {
let characterHashMap = {}
let oddQuantity = 0;
for (let i = 0; i < input.length; i++) {
const character = input[i].toLowerCase()
if (isEmpty(character)) {
continue
}
if (characterHashMap[character]) {
characterHashMap[character] = incremet(characterHashMap[character])
oddQuantity = updateOddQuantity(characterHashMap[character], oddQuantity)
continue
}
assoc(characterHashMap, character)
oddQuantity = incremet(oddQuantity)
}
return oddQuantity < 2
}