leetcode 409 最长回文串 JavaScript
思路:
此题非寻找而是构造,那么回文串只需要对称即可,也就是偶数次的字母收录,字符串中间还可以再加一个数字,也可以不加。
举个例子:abad 首先a出现两次,收录,之后在b和d找一个作为中间值即可,最终形成aba或者ada 长度为3
另一个例子aa a出现两次,收录,遍历完成,因为是偶数个,所以也就没有中间值了。(如果是aab,那么b可以作为中间值拼成aba)。
代码思路就是,用一个map对象,遍历过程中如果map里面没有该key值,存入到map中(也就是代码里面map[s[i]]=1,这里=任意数都可以,只是占个位置),之后如果再碰到相同的key值,就让count+2,也就是获得一对相同的数,同时把该属性删掉(我用的是普通js对象,删除属性使用delete map[s[i]],如果用es6的new Map或者new Set,可以用.delete这个api)
最后返回值检查map里面是否有多出来的属性,如果有 那么可以拿出一个作为中间值,也就是count+1。
代码如下:
/**
* @param {string} s
* @return {number}
*/
var longestPalindrome = function(s) {
let map = {};
let count = 0;
for(let i=0;i<s.length;i++){
if(map[s[i]]){
count+=2;
delete map[s[i]];
}
else map[s[i]] = 1;
}
return Object.keys(map).length>0?count+1:count;
};