题目
给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串。
在构造过程中,请注意区分大小写。比如 “Aa” 不能当做一个回文字符串。
注意:
假设字符串的长度不会超过 1010。
解答
/**
* @param {string} s
* @return {number}
*/
var longestPalindrome = function(s) {
// 获取所有的字符的个数
let cMap = new Map();
for(let item of s){
cMap.set(item , cMap.has(item) ? cMap.get(item) + 1 : 1)
}
// 对每个字符进行与2相除,商*2为可收录长度,余数存在为1的值则长度加1
let isGotRemainder = false, quotient = 0
for(let m of cMap){
// 商
quotient += Math.floor(m[1] / 2)
// 余数
if(!isGotRemainder && m[1] % 2 === 1){
isGotRemainder = true
}
}
return isGotRemainder ? (quotient * 2) + 1 : (quotient * 2)
};
备注:
看了一下官方题解,特地说明元素均为字符串,官方采取固定长度的int数组来存数组;不过感觉map简单粗暴,什么类型都OK