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),而在处理奇偶问题上会比较繁琐,所以 ...
随机推荐
- git submodule 删除及修改
1. 删除子模块 # 逆初始化模块,其中{MOD_NAME}为模块目录,执行后可发现模块目录被清空 git submodule deinit {MOD_NAME} # 删除.gitmodules中记 ...
- 用processing生成屏保程序
想法 利用随机数控制圆圈的大小.位置以及颜色,可以产生随机的美感. 让小球动起来,并且在屏幕边界处产生反弹效果. 代码 1: float circle_x = (float) 0.0; 2: floa ...
- 为什么重写equals还要重写hashcode
参考回答: HashMap中,如果要比较key是否相等,要同时使用这两个函数!因为自定义的类的hashcode()方法继承于Object类,其hashcode码为默认的内存地址,这样即便有相同含义的两 ...
- 运维 06 vim与程序员
vim与程序员 所有的 Unix Like 系统都会内建 vi 文书编辑器,其他的文书编辑器则不一定会存在. 但是目前我们使用比较多的是 vim 编辑器. vim 具有程序编辑的能力,可以主动的以 ...
- os.walk|图片数据集
该函数的功能:遍历指定文件夹下的所有[路径][文件夹][文件名] ''' os.walk(top[, topdown=True[, onerror=None[, followlinks=False]] ...
- Springboot+mybatis+dbcp+mysql简单集成
1.添加依赖 <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>m ...
- NFS挂载error:reason given by server: Permission denied
首先你得看看你的NFS服务有没有启动 然后你看看你要mount的文件夹有没有在NFS主机共享 然后再看权限对没对
- idea设置忽略svn的文件或目录
1. 这个地方可以设置忽略的文件和目录,但是这里设置之后,我们在工程里面就看不到了 2. 这里设置提交是后要忽略的文件,比如我忽略的target目录,*.iml 我再1中设置了target目录发现我的 ...
- 将中国标准时间)转化为yyyy-MM-dd
有两种方法: 1. ]); ) + '-' + d.getDate() + ' ' + d.getHours() + ':' + d.getMinutes() + ':' + d.getSeconds ...
- jq 手机键盘消失出现白色延迟
input 输入框失去焦点 $("#input").blur() 接口调用setTimeout 让输入框消失后再出现loading和调用接口 ios手机loading覆盖不完全 自 ...