最长回文串

最长回文串题目描述 给定一个包含大写字母和小写字母的字符串 找到通过这些字母构造成的最长的回文串 在构造过程中 请注意区分大小写 比如 Aa 不能当做一个回文字符串 注意 假设字符串的长度不会超过 1010 示例 1 输入 abccccdd 输出 7 解释 我们可以构造的最长的回文串是 dccaccd 它的长度是 7 思路 我们用哈希表 映射都可以 记录下每个字符出现的次数 然后有以下几种情况 如果个数为偶数 因为偶数可以拆到两边 所以直接加上偶数个数即可 奇数 如果字符个数为奇

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

思路:我们用哈希表(映射都可以)记录下每个字符出现的次数。然后有以下几种情况:

  • 如果个数为偶数,因为偶数可以拆到两边,所以直接加上偶数个数即可。
  • 奇数,如果字符个数为奇数只有一个的话,我们将其放在中间即可。如果大于一个我们就将大的放中间,其余的减去一变成偶数放到两边即可。

代码:

int longestPalindrome(string s) { 
    unordered_map<char,int>key; for(auto ch:s) key[ch]++; int count =0,cnt=0,mid=0; int ans = 0; for(auto it=key.begin();it!=key.end();++it) { 
    if(it->second%2) //为奇数 { 
    mid = max(mid,it->second); //记录最大值 count++; //个数 cnt +=it->second; } if(it->second%2==0) //为偶数 ans +=it->second; } if(count==0) return ans; else if(count==1) return ans+cnt; else { 
    ans +=mid; cnt=cnt-mid-1*(count-1); //放到两边的是总的减去放到中间的,因//为每一个奇数都要减一,所以还要减去(count-1) return ans+cnt; } } 

优化:我们发现如果是奇数的话只要加上其个数减去一即可。有因为在中间的可以不用减我们只要在后边特判加上一即可。

int longestPalindrome(string s) { 
    map<char,int> count; for(char ch:s)count[ch]++; int res=0; for(auto it:count){ 
    if(it.second&1)res+=it.second-1;//加上奇数字符数-1 else res+=it.second;//加上偶数字符数 } return res<s.size()?res+1:res;//加上一个单字符放在中间 } 
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/216307.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 下午12:07
下一篇 2026年3月18日 下午12:08


相关推荐

  • 关于namecheap 域名运营商,域名赎回详细步骤

    关于namecheap 域名运营商,域名赎回详细步骤

    2022年2月17日
    83
  • python endswith函数_Python endswith() 方法

    python endswith函数_Python endswith() 方法原博文 2017 10 1813 55 描述 endswith 方法用于判断字符串是否以指定后缀结尾 如果是则返回 True 否则返回 False 语法 endswith 方法语法 S endswith suffix start 0 end len S 参数 S 父字符串 suffix 指定后缀 相关推荐 2019 09 2821 13 Pyth

    2026年3月17日
    2
  • java adt入门教程_Android基础入门教程目录

    java adt入门教程_Android基础入门教程目录第一章:环境搭建与开发相关(已完结10/10)https://blog.csdn.net/coder_pig/article/details/50000773Android基础入门教程——1.1背景相关与系统架构分析Android基础入门教程——1.2开发环境搭建Android基础入门教程——1.2.1使用Eclipse+ADT+SDK开发AndroidAPPAndroid基础入…

    2022年5月27日
    37
  • 《Python游戏编程入门》第二章编程挑战

    《Python游戏编程入门》第二章编程挑战转眼间就到六月份啦 隔一段时间就来写写博客来总结一下这段时间自己所学的东西 近期还是在学 Python Python 真是一门神奇的语言 你越用越喜欢 哈哈哈 近期在学校图书馆看到了一本叫 Python 游戏编程入门 的书 作者是 JonathanS Harbour 在图书馆稍微看了一下 发现还是蛮有趣的 所以就果断借走了 嘻嘻嘻 第一章是简单的介绍了 Python 的面向对象编程 不是很有意思就略过啦 第

    2026年3月16日
    1
  • PDF搜索

    PDF搜索nbsp nbsp nbsp nbsp nbsp nbsp nbsp 过完年后就一直在忙 也没来得及更新 blog 今天提前把工作完成 终于有空了 nbsp nbsp nbsp nbsp nbsp nbsp 前段时间在做一个 pdf 文档的搜索引擎 主要是为公司内部网站服务的 以前很少接触搜索这方面的知识 一下子做起来感觉难度不小 不过有个开源的搜索框架 Lucene 看了一下 感觉很是不错 nbsp nbsp nbsp nbsp nbsp nbsp 要搜索 pdf 文档 必须首先把 pdf 文档转换为文本文档后才能进行搜索 所以主要分以下几个步骤 nbsp nbsp

    2026年3月18日
    1
  • 智谱GLM-4.7-Flash大模型本地部署完全指南:27个量化版选择!

    智谱GLM-4.7-Flash大模型本地部署完全指南:27个量化版选择!

    2026年3月12日
    1

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号