Skip to content

Instantly share code, notes, and snippets.

@Jwing28
Created October 12, 2017 22:28
Show Gist options
  • Save Jwing28/51fe77584118b3a9f0b685fd78417d82 to your computer and use it in GitHub Desktop.
Save Jwing28/51fe77584118b3a9f0b685fd78417d82 to your computer and use it in GitHub Desktop.
Longest Palindrome
//create freq obj for each letter, iterate over
//if even, increment a counter of its value
//if odd > 1, increment counter value - 1
//if odd = 1, dont count it.
//at end you can add 1 to account for letters that have freq of one. (create variable for this)
//can only happen once (assuming letter w/ freq of 1 exists.)
//ex's. '' - 0, abc - 1, abbc - 3, aaabb - 5, zzz - 3, aaabbcde- 5
var longestPalindrome = function(s) {
var freq = {}, longest = 0, hasOdd = false;
s = s.split("");
s.forEach(function(letter){
freq[letter] = freq[letter] + 1 || 1;
});
for (var key in freq) {
if(freq[key] % 2 === 0) {
longest += freq[key];
} else {
hasOdd = true;
longest += freq[key] - 1;
}
}
return hasOdd ? longest + 1 : longest; //if no letters of freq 1, aabbbaa works. if has it, then adds it back once.
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment