leetcode.字符串.409最长回文串-Java
1. 具体题目
给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串。在构造过程中,请注意区分大小写。比如 "Aa" 不能当做一个回文字符串。
注意: 假设字符串的长度不会超过 1010。
示例 1: 输入: "abccccdd" 输出: 7
解释:我们可以构造的最长的回文串是"dccaccd", 它的长度是 7。
2. 思路分析
回文串是以中间为轴左右对称的,所以希望有一个中心元素,其余元素个数都为偶数。
首先想到统计字符串中各字符个数,判断奇偶性,保留一个中心元素之后,其余只要偶数元素。但是其实对于奇数元素,可以减去一个变为偶数元素,之后加进结果中。
3. 代码
public int longestPalindrome(String s) {
int[] l = new int[26]; //记录各小写字母个数
int[] b = new int[26]; //记录各大写字母个数
for(int i = 0; i < s.length(); i++){
int diff = s.charAt(i) - 'A';
if(diff < 26){
b[diff] += 1;
}else{
diff = s.charAt(i) - 'a';
l[diff] += 1;
}
}
int result = 0;
for(int num : l){
result += num / 2 * 2; //保留所有偶数元素,并将奇数元素转为偶数
if(num % 2 != 0 && result % 2 == 0) result ++; //保留一个中心元素
}
for(int num : b){
result += num / 2 * 2;
if(num % 2 != 0 && result % 2 == 0) result ++;
}
return result;
}
leetcode.字符串.409最长回文串-Java的更多相关文章
- leetcode.字符串.5最长回文子串-Java
1. 具体题目 给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. 示例 1: 输入: "babad" 输出: "bab" ...
- Java实现 LeetCode 409 最长回文串
409. 最长回文串 给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串. 在构造过程中,请注意区分大小写.比如 "Aa" 不能当做一个回文字符串. 注意 ...
- leetcode 每日签到 409. 最长回文串
题目: 最长回文串 给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串. 在构造过程中,请注意区分大小写.比如 "Aa" 不能当做一个回文字符串. 注意: ...
- 字符串的最长回文串:Manacher’s Algorithm
题目链接:Longest Palindromic Substring 1. 问题描述 Given a string S, find the longest palindromic substring ...
- [LeetCode] Longest Palindrome 最长回文串
Given a string which consists of lowercase or uppercase letters, find the length of the longest pali ...
- 从0打卡leetcode之day 6--最长回文串
题目描述 给定一个字符串 s,找到 s中最长的回文子串.你可以假设 s 的最大长度为1000. 示例1 输入: "babad" 输出: "bab" 注意: &q ...
- LeetCode 409——最长回文串
1. 题目 2. 解答 我们先来看一看回文子串的规律,如果回文子串的长度为偶数,那么其中所有的每个元素都出现了偶数次:如果回文子串的长度为奇数,那么有一个元素出现了奇数次而其余每个元素都出现了偶数次. ...
- 算法笔记_032:最长回文串(Java)
目录 1 问题描述 2 解决方案 2.1 中心扩展法 2.2 Manacher算法 1 问题描述 给定一个字符串,求它的最长回文子串的长度. 2 解决方案 2.1 中心扩展法 此处,首先枚举出回文 ...
- Manacher模板(O(n)内求最长回文串长度)
转自:https://segmentfault.com/a/1190000008484167 /* 由于回文分为偶回文(比如 bccb)和奇回文(比如 bcacb),而在处理奇偶问题上会比较繁琐,所以 ...
随机推荐
- P3203 [HNOI2010]弹飞绵羊(LCT)
弹飞绵羊 题目传送门 解题思路 LCT. 将每个节点的权值设为\(1\),连接\(i\)和\(i+ki\),被弹飞就连上\(n\),维护权值和\(sum[]\).从\(j\)弹飞需要的次数就是\(sp ...
- 封装tab切换事件
HTML <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <titl ...
- JS获取图片的原始宽度和高度,兼容IE7,8
naturalWidth和naturalHeight 可以直接获取img的原始宽高,而innerHight,innerWith只是获取图片所占容器盒子的宽高. // 封装function getNat ...
- >>> print "hello" SyntaxError: Missing parentheses in call to 'print'
错误原因说你的函数print缺省圆括号,可以知道你用的python是3.x版本3.x版本的python,print中的参数要用圆括号括起来,改成:print("hello")
- 深信服杯ctf部分wp
CRYPTO1,NO SOS题目给了一段由.和-构成的密码由于题目提示不是摩斯码,将.和-化为0和1,长度为65位无法与8或7整除,无法转换为ascii,但可以被5整除,猜测为培根密码,将0化为a,1 ...
- 微信小程序のwxs语言
一.wxs介绍 wxs是微信小程序自身的脚本语言,用来过滤和计算.wxs可以通过文件可模块标签来定义 文件需要.wxs后缀文件 二.实例 <wxs module="test1" ...
- 消费kafka的消息,并将其SparkStreaming结果保存到mysql
将数据保存到mysql,需要用到jdbc.为了提高保存速度,我写了一个连接池 1.保存到mysql的代码 package test05 import org.apache.log4j.{Level, ...
- 前端移动端开发总结(Vue)
上下固定,中间滚动布局(FLEX) <div id="app"> <div class="header"></div> &l ...
- MySQL 复制参数详解
log-bin 二进制日志 server-id 早起版本必须添加 1-pow(2,32)-1 推荐使用 端口号+ip最后一位 5.6后可以动态修改 server-uuid (5.6以后) 默认存在 ...
- element 点击切换按钮的颜色
1.html <el-button-group label="时间"> <el-button @click="seeHour" :type=& ...