力扣 0409 - 最长回文串

题目详情:最长回文串

1. 思路

这个题目难点在于找到“最长回文串”的规律。自己可以手写几个回文串,然后统计下每个字母的数量。

“最长回文串”的规律就是:取每个字母的数量的最大偶数(比如,3就取2,7就取6)相加,如果字母中的数量有奇数,则在结果最后再加 1。

2. 代码(JavaScript 版)

/**
 * @param {string} s
 * @return {number}
 */
var longestPalindrome = function (s) {
  if (!s) return 0
  const count = Object.create(null)
  for (let i = 0; i < s.length; i++) {
    const char = s[i]
    if (count[char]) {
      count[char] += 1
    } else {
      count[char] = 1
    }
  }
  let max = 0
  let hasSingle = false
  for (let char in count) {
    const num = count[char]
    if (num % 2 === 0) {
      max += num
    } else {
      hasSingle = true
      max += num - 1
    }
  }
  return hasSingle ? max + 1 : max
};

3. 提交记录(仅供参考)

  • 执行时间:72ms
  • 内存消耗:35.1MB

你可能感兴趣的:(日拱一算法)