java数据结构与算法刷题-----LeetCode409. 最长回文串

leetcode刷题列表 leetcode, fb刷题列表,包含难易程度 适用于2018,2019 立即下载
java数据结构与算法刷题目录(剑指Offer、LeetCode、ACM)-----主目录-----持续更新(进不去说明我没写完):https://blog.youkuaiyun.com/grd_java/article/details/123063846

在这里插入图片描述

解题思路
  1. 我们来看一个字符串abccccddd可以组成的所有回文串,dccaccd,cdcacdc,ccdadcc,dccbccd,cdcbcdc,ccdbdcc,ccdddcc,cdcdcdc,dccdccd
  2. 你会发现,中间位置的字符,是出现奇数次的字符,而且如果有多个出现奇数次的,例如这里出现奇数次的字符有a,b和d。那么只能选一个作为中间的
  3. 而对于奇数次的字符
  1. 出现一次的,它只能作为回文串中间字符
  2. 出现3次及以上的,比如上面例子中的d,它可以分一个出来做中间的,其余偶数个放到两边。也可以不分一个出来,仅仅去掉一个,剩余的偶数个放两边。
  1. 而对于偶数次的字符

想要组成最长情况下,必须全放两边。

  1. 因此,我们可以得到这样一个公式,回文和=偶数和+奇数减1后之和+1,其中+1是回文串中间的那个。奇数减一后之和是因为:除了中间那个+1的,其余字符都必须偶数个。

回文串长度 = 出现偶数次的字符个数 + 出现奇数次(>=3)-1 + 1(放到中间的字符,也就是出现奇数次(1次或3次以上)的,挑一个放到中间)

  1. 而对于字符出现次数,可以使用hash表统计出现次数。但是题目给的字符范围比较小,只包含大小写字母,所以可以用数组来代替hash表,使用ASCII码最多只需128个空间,就可以代表所有情况。
代码

在这里插入图片描述

class Solution {
    public int longestPalindrome(String s) {
        char[] ch=s.toCharArray();
        int count[]=new int[128];
        //先哈希统计
        for(int i=0;i<ch.length;i++){
                count[ch[i]]++;
        }
        int ans=0;
        int js = 0;
        //回文和=偶数和+奇数减1后之和+1,其中+1是回文串中间的那个。奇数减一后之和是因为:除了中间那个+1的,其余字符都必须偶数个
        for(int i=0;i<128;i++){
            if(count[i]%2==0){//偶数和
                ans+=count[i];
            }else{
                //奇数情况:一种是当前字符出现次数为1,那么整个回文串,只能有1个出现次数为1的字符,它位于回文串的中间
                js=1;//+1
                //第二种是出现次数>3的字符,js已经保存了中间的单个字符,那么剩余的奇数个字符,都只保留偶数个
                if(count[i]>=3){
                    ans+=count[i]-1;//奇数减1后之和,也就是保留偶数个
                }
            }
        }
        return ans+js;//回文和=偶数和+奇数减1后之和+1,
    }
}
Java实现查找当前字符串最大回文串代码分享 本文给大家介绍的是如何使用Java实现查找当前字符串最大回文串代码,非常的简单实用,有需要的小伙伴可以参考下 立即下载

相关推荐

Tina Linux WiFi驱动移植避坑指南:以RTL8733bs为例,详解设备树、Kconfig与固件依赖

本文详细解析了在Tina Linux上移植RTL8733bs WiFi驱动的关键步骤与常见问题,涵盖设备树配置、内核依赖、固件加载及启动时序等核心环节。通过实战案例和排查清单,帮助开发者规避SDIO控制器配置、电源管理、GPIO极性等典型陷阱,确保驱动稳定运行。

weixin_29164185的博客 264

最长回文子串【Java实现】

现有一个字符串s,求s的最长回文子串的长度。

Infinity_and_beyond的博客 1365

树莓派5首次开机保姆级教程(无显示器通过VNC连接树莓派桌面)

选择 Interface Options > VNC > Yes 启用服务。2.在Windows电脑上安装VNC软件。重启树莓派:sudo reboot。3.使用VNC远程访问树莓派桌面。

qq_34184505的博客 2351

LeetCode刷题笔记 Java常用代码

LeetCode刷题笔记 Java常用代码

weixin_45322373的博客 761

dxf-viewer 查看器

dxf-viewer SDK 的示例,它是一个基于 Three.js 和 Vue3 构建的基于 WebGL 的 BIM 模型查看器。它用于查看 DWG/DXF/PDF 文件。面积测量 - 角度测量 -标记。

qq_25547755的博客 866

苏宁易购手机行情比价系统:构建一个完整的Python爬虫实战指南

在当今数字化时代,智能手机已成为人们生活中不可或缺的一部分。随着各大手机品牌每年推出多款新品,消费者面临着越来越多的选择。然而,不同电商平台、不同时间段的价格波动使得消费者很难把握最佳购买时机。苏宁易购作为国内领先的电商平台之一,拥有丰富的手机商品信息和价格数据。本文将带领读者构建一个完整的苏宁易购手机行情比价系统,帮助消费者实时掌握手机价格动态。

2201_76125261的博客 207

回文数、最大回文子串的若干方法(Java)

判断回文数的方法:1.正反输出,2.一一比较。求最长回文子串的方法:1.暴力法;2.中心扩展法;3.递归;4.动态规划。

OhGreatGirl's Blog 570

本地快速部署谷歌开放模型Gemma教程(基于Ollama)

谷歌最近发布了新一代开源AI模型Gemma,此次发布的 Gemma 相比自家的 Gemini 更加轻量级,模型权重也一并开源。不仅可以在笔记本电脑上运行,而且还免费可商用,支持中文。运行速度飞快。

特立独行的博客 6718

【LeetCode刷题】Java随缘更新

解释:因为 ‘*’ 代表可以匹配零个或多个前面的那一个元素, 在这里前面的元素就是 ‘a’。给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 ‘.’ 和 ‘*’ 的正则表达式匹配。输入:nums = [-1,2,1,-4], target = 1。” 表示可匹配零个或多个(‘*’)任意字符(‘.’)。输入:s = “aa”, p = “a*”输入:s = “aa”, p = “a”

CODEING一场空的博客 576

【Bug已解决】Codex 切换 model_provider 后历史会话消失的解决方案

方案适用场景推荐指数切回原 provider 验证排查的第一步,确认数据是否真的丢失⭐⭐⭐⭐⭐查看本地会话文件进一步确认数据完整性⭐⭐⭐⭐⭐查阅跨 provider 恢复命令官方是否提供了对应功能⭐⭐⭐使用社区辅助工具需要频繁切换 provider 的场景⭐⭐⭐定期备份配置目录任何场景下的通用保险措施⭐⭐⭐⭐切换后历史会话"消失"的本质是客户端的会话列表展示逻辑受当前活跃 provider 状态过滤,而不是原始数据文件被真正删除。

一键难忘的博客 6002

WPS访问权限不足怎么解决??具体怎么操作?

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值。

**My Coding Family** 4172

LeetCode(力扣)数组篇 JAVA刷题详解

是不是有许多小伙伴在刷力扣的时候感觉无从下手?从头按顺序开始刷的童鞋们可能会比较有感触,为什么才第四题就感觉很难了?没关系,本文将对力扣的 1-500 题中不需要会员的数据结构与算法题目(数据库与 shell 除外)进行分类,并推荐一个刷题的顺序。完全零基础可以刷题吗?不能,至少要基本掌握一门计算机语言的语法。但现在在网上随便搜一下就能搜到许多关于计算机语言的教程。当然,最好还是上一下正规的课程。刷题顺序很重要吗?重要。按照题目类别结构化地刷题的速度不仅更快,而且可以在刷完一类题之后进行总结。

weixin_61779644的博客 2538

【linux】解决报错:Network error: Connection refused

【linux】解决报错:Network error: Connection refused

weixin_44502754的博客 4940

Java实现 LeetCode 409 最长回文串

409. 最长回文串 给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串。 在构造过程中,请注意区分大小写。比如 “Aa” 不能当做一个回文字符串。 注意: 假设字符串的长度不会超过 1010。 示例 1: 输入: “abccccdd” 输出: 7 解释: 我们可以构造的最长的回文串是"dccaccd", 它的长度是 7。 class Solution { p...

南 墙 1万+

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

力扣409-最长回文串

Copyright©Zi10ng 一个渣渣的成长之路 这是一个关于回文串的题 题目地址 题目描述: 给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串。 输入: “abccccdd” 输出: 7 解释: 我们可以构造的最长的回文串是"dccaccd", 它的长度是 7。 题目思路 这里不是让找出最长回文串而是构造最长回文串,所以只要明白回文串的性质基本都可以做出...

王星星 1785

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

【LeetCode】 409. Longest Palindrome 最长回文串(Easy)(JAVA)

【LeetCode】 409. Longest Palindrome 最长回文串(Easy)(JAVA) 题目地址: https://leetcode.com/problems/longest-palindrome/ 题目描述: Given a string which consists of lowercase or uppercase letters, find the length of t...

qq_16927853的博客 249

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

[LeetCode]409. 最长回文串(java实现)

[LeetCode]409. 最长回文串(java实现)1. 题目2. 读题(需要重点注意的东西)3. 解法4. 可能有帮助的前置习题5. 所用到的数据结构与算法思想6. 总结 1. 题目 2. 读题(需要重点注意的东西) 需要注意到的是: 字符串中既有大写字母,又有小写字母,因此数组长度要为 26x2 = 52; 要知道A的ascii码值为97,a的ascii码值为65 不能直接’a’ <= c <= ‘z’,要使用&&连接:‘a’ <= c && c

cloud的博客 390

leetcode 409 最长回文串(Java

最长回文串(Java题目描述题目分析代码 题目描述 给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串。 在构造过程中,请注意区分大小写。比如 “Aa” 不能当做一个回文字符串。 注意: 假设字符串的长度不会超过 1010。 示例 1: 输入: “abccccdd” 输出: 7 题目分析 代码 Java: ...

weixin_44896376的博客 231

​LeetCode刷题实战409:最长回文串

算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试。所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 !...

程序IT圈 188

leetcode刷题记录

刷题过程记录

洪肥肥的博客 2063

409. 最长回文串(简单题)

题目描述: 给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串。 在构造过程中,请注意区分大小写。比如 “Aa” 不能当做一个回文字符串。 注意: 假设字符串的长度不会超过 1010。 示例 1: 输入: “abccccdd” 输出: 7 解释: 我们可以构造的最长的回文串是"dccaccd", 它的长度是 7。 来源:力扣(LeetCode) 链接:https://le...

闭关修炼 404

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

力扣解题,每日一题:409. 最长回文串 难度- 简单 给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串。 在构造过程中,请注意区分大小写。比如 “Aa” 不能当做一个回文字符串。 注意: 假设字符串的长度不会超过 1010。 示例 1: 输入: “abccccdd” 输出: 7 解释: 我们可以构造的最长的回文串是"dccaccd", 它的长度是 7。 来源:力扣...

了迹奇有没 437

LeetCode刷题日记:409.最长回文串

最长回文串 题目描述: 给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串。 在构造过程中,请注意区分大小写。比如 “Aa” 不能当做一个回文字符串。 注意: 假设字符串的长度不会超过 1010。 示例 1: 输入: “abccccdd” 输出: 7 解释: 我们可以构造的最长的回文串是"dccaccd", 它的长度是 7。 解析: 统计每个字符的个数即可,双数才能构...

Cherish@WVv 217

【leetcode刷题】[简单]409. 最长回文串(longest palindrome)-java

最长回文串 longest palindrome题目分析解答 题目 给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串。 在构造过程中,请注意区分大小写。比如 “Aa” 不能当做一个回文字符串。 注意: 假设字符串的长度不会超过 1010。 示例 1: 输入: "abccccdd" 输出: 7 解释: 我们可以构造的最长的回文串是"dccaccd", 它的长度是 7。...

mikuluna的博客 342
上一篇: java数据结构与算法基础-----位运算-----持续补充
下一篇: java数据结构与算法刷题-----LeetCode647. 回文子串
ydenergy_殷志鹏
博客等级 码龄7年 5887粉丝 543原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ydenergy_殷志鹏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值