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

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

注意:

假设字符串的长度不会超过 1010。

示例 1:

1
2
3
4
5
6
7
8
输入:
"abccccdd"

输出:
7

解释:
我们可以构造的最长的回文串是"dccaccd", 它的长度是 7。
个人解答
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
/**
* @param {string} s
* @return {number}
*/
var longestPalindrome = function(s) {
var obj = {};
var res = 0;
var hasOdd = false;
for (var i = 0; i < s.length; i++) {
if (!obj[s[i]]) {
obj[s[i]] = 1;
} else {
obj[s[i]]++;
}
}
res = Object.values(obj).reduce((result, next) => {
if ((next & 1) === 0) { // 偶数
result += next;
} else { // 奇数
result += next - 1;
hasOdd = true;
}
return result;
}, 0);

return hasOdd ? res + 1 : res;
};
执行结果

执行用时: 76 ms, 在所有 JavaScript 提交中击败了 48.26% 的用户;
内存消耗: 36.2 MB, 在所有 JavaScript 提交中击败了 53.33% 的用户。