[路飞]_LeetCode409.最长回文字符串

227 阅读1分钟

「这是我参与11月更文挑战的第9天,活动详情查看:2021最后一次更文挑战

LeetCode409.最长回文字符串

题目要求
给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串。
在构造过程中,请注意区分大小写。比如 "Aa" 不能当做一个回文字符串。
注意:
假设字符串的长度不会超过 1010
示例
输入:"abccccdd"​
输出:7​
解释:我们可以构造的最长的回文串是"dccaccd", 它的长度是 7。
思路
1.新建一个map,每次循环字符串,判断map里面是否包含这个字符串,如果不包含就add进去,如果包含就删除这个字符串并且,把统计回文字符串的长度+2
let map = new Set();
let res = 0;
for (let i = 0; i < s.length; i++) {  
    if (map.has(s[i])) {    
        res += 2;    
        map.delete(s[i]);  
    } else {    
        map.add(s[i]);  
    }
}
2.最后统计一下map的size值如果大于等于1的话,可以把这个值放入回文字符串的中间(单身汉只允许有一个!!!)
if (map.size >= 1) {  
    res++;
}

完整代码

var longestPalindrome = function(s) {    
    let map = new Set();    
    let res = 0;    
    for (let i = 0; i < s.length; i++) {        
        if (map.has(s[i])) {            
            res += 2;            
            map.delete(s[i]);        
        } else {           
            map.add(s[i]);        
        }    
    }    
    if (map.size >= 1) {        
        res++;    
    }    
    return res;
};