最长回文串

举报
掘金安东尼 发表于 2022/10/04 20:39:47 2022/10/04
【摘要】 LeetCode 75 学习计划适用于想为技术面试做准备但不确定应该聚焦于哪些题目的用户。学习计划中的题目都是经过精心挑选的,Level 1和 Level 2 学习计划是为初级用户和中级用户准备的,题目覆盖了大多数中层公司面试时所必需的数据结构和算法,Level 3 学习计划则是为准备面试顶级公司的用户准备的。来源 第 6 天 最长回文串难度:简单 题目给定一个包含大写字母和小写字母的字符串...

LeetCode 75 学习计划适用于想为技术面试做准备但不确定应该聚焦于哪些题目的用户。学习计划中的题目都是经过精心挑选的,Level 1和 Level 2 学习计划是为初级用户和中级用户准备的,题目覆盖了大多数中层公司面试时所必需的数据结构和算法,Level 3 学习计划则是为准备面试顶级公司的用户准备的。来源

第 6 天

最长回文串

难度:简单

题目

给定一个包含大写字母和小写字母的字符串 s ,返回 通过这些字母构造成的 最长的回文串 。

在构造过程中,请注意 区分大小写 。比如 “Aa” 不能当做一个回文字符串。

示例 1:
输入:s = "abccccdd"
输出:7
解释:
我们可以构造的最长的回文串是"dccaccd", 它的长度是 7。

示例 2:
输入:s = "a"
输入:1

题解

首先用一个 map 来统计一下各个字母出现的次数:

 let strMap = {};
for(let i=0;i<s.length;i++){
    if(s[i] in strMap){
        strMap[s[i]] += 1;
    } else {
        strMap[s[i]] = 1;
    }
}

如果 s 串字符都是偶数个,那么整个长度。

如果长度有奇数,则将字符出现的次数减去一,使它出现的次数为偶数次,然后加起来;

最后,如果存在奇数,则在最终结果加 1 ;

得结果即为最大的长度~

JavaScript 实现:

var longestPalindrome = function(s) {
    let ans = 0;
    let odd = false;
    let strMap = {};
    for(let i=0;i<s.length;i++){
        if(s[i] in strMap){
            strMap[s[i]] += 1;
        } else {
            strMap[s[i]] = 1;
        }
    }
    
    for(let key in strMap) {
        if(strMap[key] % 2 === 0) {
            ans += strMap[key];
        } else {
            odd = true;
            ans += strMap[key]-1;
        }
        
    }
    if(odd) {
        ans+=1;
    }
    return ans;
};

总结

统计字符出现次数用 map,统计最长长度是多少,而不是最长的是哪个,这个事先要明确。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。