题目描述
- 给定一个包含大写字母和小写字母的字符串
s ,返回 通过这些字母构造成的 最长的回文串 。
- 在构造过程中,请注意 区分大小写 。比如
"Aa" 不能当做一个回文字符串。
解题思路
回文串通俗理解---多个偶数+一个奇数
- 遍历计算字符串中相同字符的个数,使用map存储
- 遍历map,计算可用偶数字符个数
- 计算奇数字符的个数(大于0结果+1,否则+0)
解题代码(JavaScript)
var longestPalindrome = function (s) {
let smap = new Map();
let result = 0;
let odd = 0;
for (let i = 0; i < s.length; i++) {
if (!smap.has(s[i])) {
smap.set(s[i], 1);
} else {
smap.set(s[i], smap.get(s[i]) + 1);
}
}
smap.forEach((value) => {
result += parseInt(value / 2) * 2;
if (value % 2 !== 0) {
odd++;
}
});
return odd > 0 ? result + 1 : result;
};
看着更简洁的解题代码(JavaScript)
var longestPalindrome = function (s) {
let smap = new Map();
let result = 0;
for (let i = 0; i < s.length; i++) {
if (!smap.has(s[i])) {
smap.set(s[i], 1);
} else {
result += 2;
smap.delete(s[i]);
}
}
result += smap.size > 0 ? 1 : 0;
return result;
};