博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
leetcode 409 最长回文串(字符哈希)
阅读量:2432 次
发布时间:2019-05-10

本文共 1447 字,大约阅读时间需要 4 分钟。

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

在构造过程中,请注意区分大小写。比如 “Aa” 不能当做一个回文字符串。
注意:
假设字符串的长度不会超过 1010。
示例 1:
输入:
“abccccdd”
输出:
7
解释:
我们可以构造的最长的回文串是"dccaccd", 它的长度是 7。
回文字符串,从前向后遍历和从后向前遍历都是相同的
问题思考:
例如在s = "abccccddaa"中,有3个a,1个b,4个c,2个d
使用字符串s中的字符,任意组合,生成新的字符串,若生成的字符串为回文字符串,需要除了中心字符,其余字符只要头部出现,尾部就要出现
在字符串中,字符数量为偶数的字符,或为奇数的字符如何进行处理
1、在字符串中,字符数量为偶数的字符:
全部使用,头部放一个字符,尾部就对应放一个
2、在字符串中,字符数量为奇数的字符:
丢掉一个字符,剩下的字符数为偶数个,按照字符数量为偶数的字符进行处理
3、若有剩余的字符,随便选择一个字符当做中心字符
算法思路:
1、利用字符哈希方法,统计字符串中所有的字符数量
2、设置最长回文串偶数字符长度为max_length = 0;
3、设置是否有中心点标记flag = 0;
4、遍历每一个字符,字符数为count,若count为偶数,max_length+=count;若count为奇数,max_length += count - 1, flag = 1;
5、最终最长回文子串长度:max_length + flag
例如在s = "abccccddaa"中,有3个a,1个b,4个c,2个d
1、3个a,max_length += 2;flag = 1;如生成aa
2、1个b,max_length += 0;忽略b
3、4个c,max_length += 2;如生成ccaacc
4、2个d,max_length += 2;如生成dccaaccd
flag = 1;
故可生成如:dccaaaccd、dccabaccd
最终长度:max_length + flag = 8 + 1 = 9
代码如下:

class Solution {
public: int longestPalindrome(string s) {
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; }};

转载地址:http://pvxmb.baihongyu.com/

你可能感兴趣的文章
3 年培养 10 万“码农”,郑州推出“码农计划”
查看>>
程序员弃码投中医?还做成了不错的生意! | 极客视频
查看>>
百度一 29 岁程序员因“篡改数据”被抓
查看>>
去年我年薪 30W,今年我一天做 3 顿饭
查看>>
入职大厂,我容易吗?
查看>>
狂赚 1227 亿!腾讯员工 2020 年人均年薪 81 万;小米员工人均年薪 45 万
查看>>
漫画:什么是加密算法?
查看>>
程序员有话说 |当那个不靠谱的程序员跟我做同一个项目时
查看>>
程序员是如何运用增长思维找到女朋友?
查看>>
@程序员,离职让企业损失近900亿,还遭疯抢!他凭什么?
查看>>
“离开360时,它只给了我一块钱”
查看>>
PDF 翻译神器,再也不担心读不懂英文 Paper 了
查看>>
漫话:如何给女朋友解释什么是RPC
查看>>
不要成为自己讨厌的那种程序员 | 程序员有话说
查看>>
为什么程序员下班后只关显示器从不关电脑?
查看>>
滴滴裁员 2000 人,具体补偿方案已出
查看>>
余生,做个不焦虑的程序员!
查看>>
Spring Boot 中的响应式编程和 WebFlux 入门
查看>>
如何从零开始两天撸一个微信小程序?!(内含源码)
查看>>
女神?御姐?文艺?这样的程序媛你绝没见过! | 程序员有话说
查看>>