Skip to content

Instantly share code, notes, and snippets.

@BTMPL
Created August 8, 2017 18:21
Show Gist options
  • Save BTMPL/e71fa382c1c5baa9efd3816839831e7e to your computer and use it in GitHub Desktop.
Save BTMPL/e71fa382c1c5baa9efd3816839831e7e 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