Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情。
leetcode刷题409最长回文串
前文
本文为leetcode字符串操作类型题目,题目序号为409,主要考察操作字符串遍历角度的效率。
题目信息
给定一个包含大写字母和小写字母的字符串 s ,返回 通过这些字母构造成的 最长的回文串 。
在构造过程中,请注意 区分大小写 。比如 "Aa" 不能当做一个回文字符串。
解题思路
根据题目信息可知,本题目主要考察对于字符串的操作。给定一个字符串,想要得到其中能够组成的最长回文数。由于回文数是一个对称的数字,因此我们可以从偶数的角度操作。首先记录所有字符串出现的次数,然后进行记录。最后根据记录的结果,统计所有的偶数数目即可。如果不足,那么再增加一。但要注意,笔者也犯了该错误,也就是超过2的奇数同样要记录n-1到最终结果中,保证不会出现字母的漏记。至此,按照这种方式即可得到题目答案,时间复杂度o(n)。
解题代码
public int longestPalindrome(String s) {
Map<String,Integer> map = new HashMap<>();
int length = s.toCharArray().length;
for (int i = 0; i < length; i++) {
String key = String.valueOf(s.charAt(i));
map.put(key,map.getOrDefault(key,0) + 1);
}
int cnt = 0;
for (int i = 0; i < map.values().toArray().length; i++) {
Integer item = (Integer) map.values().toArray()[i];
if(item.intValue() % 2 == 0){
cnt += item.intValue();
}else if(item.intValue() >= 3){
cnt += item.intValue() - 1;
}
}
if(cnt != length){
cnt++;
}
return cnt;
}
后记
- 千古兴亡多少事?悠悠。不尽长江滚滚流。