leetcode 409题

Posted by franki on October 9, 2022

leetcode 409题 最长回文串

给定一个包含大写字母和小写字母的字符串 s ,返回 通过这些字母构造成的 最长的回文串 。

在构造过程中,请注意 区分大小写 。比如 “Aa” 不能当做一个回文字符串。

示例1

输入:s = "abccccdd"
输出:7
解释:
我们可以构造的最长的回文串是"dccaccd", 它的长度是 7。

示例2

输入:s = "a"
输入:1

思路

1 用一个 map 统计所有字符出现的字数 2 遍历这个 map,定义两个变量,一个是 answer 和 一个 odd ,分别记录最终的答案,和是否是奇数 3 如果遍历到当前的数字出现的次数是偶数次,那么很好,直接相加,如果是奇数次,那么用这个次数 - 1再相加 4 最后如果是奇数,那么记得 answer + 1

代码

/**
 * @param {string} s
 * @return {number}
 */
function longestPalindrome(s) {
  const counter = {};
  for (const v of s) {
    if (!counter[v]) {
      counter[v] = 1;
    } else {
      counter[v]++;
    }
  }

  let answer = 0;
  let odd = false;
  
  for (let key in counter) {
    if (counter[key] % 2 === 0) {
        answer += counter[key];
    } else {
        odd = true;
        answer += counter[key] - 1; 
    }
  }

  if (odd) {
      answer += 1;
  }
  
  return answer;
}

复杂度分析:

  • 时间复杂度: O(N)
  • 空间复杂度:O(1)