18 Longest Palindrome

51 阅读1分钟

Longest Palindrome

解题思路

通过观察可知最长回文的长度是出现偶数次字母的数量加上一个奇数次字母的次数,基础这个事实

  1. 利用 HashMap 存储已经出现过的字母,第二次计数就删除存储的key同时累加 count
  2. 结束时判断是否有 奇数次字母出现即 Object.keys(charMap).length > 0,如果有就 count * 2 + 1 否则直接返回 count * 2

代码

/**
 * @param {string} s
 * @return {number}
 */
var longestPalindrome = function (s) {
    const charMap = {}
    let count = 0

    for (let i = 0; i < s.length; i++) {
        const key = s[i]
        if (charMap[key]) {
            delete charMap[key]
            count++
        } else {
            charMap[key] = true
        }
    }
    if(Object.keys(charMap).length > 0) {
        return count * 2 + 1
    } else {
        return count * 2
    }
};