题目

给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串。
在构造过程中,请注意区分大小写。比如 “Aa” 不能当做一个回文字符串。
注意:假设字符串的长度不会超过 1010。

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

思路

字符哈希:数组下标,ASCII码值映射。
字母出现偶数个,直接统计长度。
字母出现奇数个,舍弃一个字母,该字母需要标志位标识;剩余变成偶数,直接统计出现次数。

最后的结果:偶数统计的数量+flag(如果出现奇数个,作为中间那个字母)。

AC代码

class Solution {public:int longestPalindrome(string s) {if(s.length()==0)//空串return 0;int char_map[128]={0};//下标统计int max_length=0;//回文串偶数部分最大长度int flag=0;//中心位标记,奇数for(int i=0;i<s.length();i++)char_map[s[i]]++;for(int i=0;i<128;i++){if(char_map[i]%2==0)//偶数个max_length+=char_map[i];else//奇数个{max_length+=char_map[i]-1;//处理成偶数flag=1;//奇数个,标志,放中间}}return max_length+flag;//偶数部分+中间位}
};

题目来源:力扣(LeetCode)
链接:请点击https://leetcode-cn.com/problems/longest-palindrome

Leetcode409最长回文串 -字符哈希相关推荐

  1. leetcode409. 最长回文串

    给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串. 在构造过程中,请注意区分大小写.比如 "Aa" 不能当做一个回文字符串. 注意: 假设字符串的长度不 ...

  2. 伍六七带你学算法 入门篇-最长回文串

    力扣解题,每日一题:409. 最长回文串 难度- 简单 给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串. 在构造过程中,请注意区分大小写.比如 "Aa" ...

  3. manacher算法----O(n)最长回文串

    manacher算法----O(n)最长回文串 分类:字符串 (126)  (0)  举报  收藏 manacher的时间复杂度为O(n),后缀数组好像可以处理O(nlogn),但是有些变态题目可能卡 ...

  4. python【力扣LeetCode算法题库】409-最长回文串(数学 计数器)

    最长回文串 给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串. 在构造过程中,请注意区分大小写.比如 "Aa" 不能当做一个回文字符串. 注意: 假设字 ...

  5. 通俗易懂的最长回文串图解、说明及Java代码(中心扩散法和Manacher算法)

    1. 回文串 作为程序员,回文串这个词已经见怪不怪了,就是一个字符串正着读和反着读是一样的,形式如abcdcba.bbaabb.这里涉及到奇回文和偶回文,奇回文指回文串的字符数是奇数,偶回文指回文串的 ...

  6. 字符串相关处理kmp,前缀数,后缀树,后缀数组,最长回文串,最长重复字串,最长非重复字串

    1. 最长回文串 一般用后缀数组或者后缀树可以解决, 用此方法:http://blog.csdn.net/v_july_v/article/details/6897097 预处理后缀树,使得查询LCA ...

  7. java 最长回文串_通俗易懂的最长回文串图解、说明及Java代码(中心扩散法和Manacher算法)...

    1. 回文串 作为程序员,回文串这个词已经见怪不怪了,就是一个字符串正着读和反着读是一样的,形式如abcdcba.bbaabb.这里涉及到奇回文和偶回文,奇回文指回文串的字符数是奇数,偶回文指回文串的 ...

  8. 回文算法java实现_java算法题:最长回文串

    LeetCode: 给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串.在构造过程中,请注意区分大小写.比如"Aa"不能当做一个回文字符串.注 意:假设字 ...

  9. 最长回文 HDU - 3068(求最长回文串的长度【马拉车算法Manacher】)

    马拉车算法 Manacher's Algorithm 是用来查找一个字符串的最长回文子串的线性方法,由一个叫 Manacher 的人在 1975 年发明的,这个方法的最大贡献是在于将时间复杂度提升到了 ...

最新文章

  1. 第四章 .net core做一个简单的登录
  2. linux 关闭java进程后重启有用吗_linux启动java进程的shell脚本(包括启动,停止,重启)...
  3. MATLAB 添加自定义的模块到simulink库浏览器
  4. httpbin.org的使用
  5. 火车载客(ybtoj-二叉堆)
  6. Web控件TreeView展开无闪烁的两个解决方法
  7. 常用的sublime text 3插件
  8. css tips —— 神奇的max-width,min-width, width覆盖规则
  9. 又一版A+B [2008年浙江大学计算机及软件工程研究生机试真题]
  10. JavaScript 4行代码找出重复出现次数最多的元素及次数
  11. mysql config type_mysql_config_editor用法举例
  12. javascript 使用canvas绘画
  13. C语言复习---获取矩阵的对角和
  14. 【手写数字识别】基于matlab GUI BP神经网络手写数字识别(导图+带面板)【含Matlab源码 320期】
  15. VMware增强型键盘驱动程序
  16. skype安卓手机版_安卓手机版电视直播播放器
  17. kalibr fov畸变模型
  18. Pytorch实现有监督对比学习损失函数
  19. 蒟蒻朱的 CSP2020 J/S 游记
  20. google黑客常用搜索语句

热门文章

  1. Java CPU占用率高分析
  2. C/C++如何传递二维数组?
  3. jQuery 人脸识别插件,支持图片和视频
  4. Android 让你的SeekBar 也支持长按事件
  5. 你适合编程吗?你喜欢编程吗?
  6. mysql连接池_基于Swoole的通用连接池 - 数据库连接池(life)
  7. java如何定义一个字符栈_Java性能优化之字符串优化处理
  8. 【RL】快速强化学习实战案例
  9. ST CUBEMX 修改MCU型号
  10. USB数据线内阻对充电电流的影响