leetcode 409 最长回文串 JavaScript

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;
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值