409. 最长回文串
Geekhyt opened this issue · 0 comments
Geekhyt commented
- 使用字母的 Unicode 编码和数组会比哈希表更优化
- 初始化存放字母出现次数的数组,默认都为 0 次
- 遍历字符串,统计字母出现的次数,65 是字母 A 的 Unicode 编码,这样可以从索引 0 开始计数
- time 的偶数次(time / 2)可以成为构造回文的一部分,再乘 2,可以得到次数
- 如果最后计算出的长度小于字符串的长度,则是奇数长度的回文,需要加 1
const longestPalindrome = function(s) {
let arr = new Array(58).fill(0)
for (let char of s) {
arr[char.charCodeAt() - 65] += 1
}
let max = 0
for (let time of arr) {
max += parseInt((time / 2), 10) * 2
}
return max < s.length ? max + 1 : max
}
- 时间复杂度: O(n)
- 空间复杂度: O(n)