Skip to content

Instantly share code, notes, and snippets.

@barbagrigia
Forked from BTMPL/palindrome.js
Created December 8, 2018 15:16
Show Gist options
  • Save barbagrigia/e3d8ab00d10d963956cd37bc94270eb7 to your computer and use it in GitHub Desktop.
Save barbagrigia/e3d8ab00d10d963956cd37bc94270eb7 to your computer and use it in GitHub Desktop.
const input = [
'racecar',
'racecarff',
'abbccc',
'a',
'aabb',
'cabc',
];
input.forEach(word => {
// lets find all the letters we have
const letters = {};
[...word].forEach(letter => {
if(!letters[letter]) letters[letter] = 0;
letters[letter]++;
});
// find the middle letter and discard odd-numbered letters
let middle = '';
Object.keys(letters).map(letter => {
if(letters[letter] % 2 === 1) {
if(!middle) middle = letter;
if(letters[letter] === 1) {
delete letters[letter];
}
else letters[letter] -= 1;
}
})
// construct the "left" part
let result = '';
Object.keys(letters).map(letter => {
result += letter.repeat(letters[letter] / 2);
})
// right part is just left part, reversed, add middle, cook, serve, delicious
result = `${result}${middle}${[...result].reverse().join('')}`;
console.log(`input: ${word} longest palindrome: ${result}`);
})
console.log('done processing input');
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment