0
点赞
收藏
分享

微信扫一扫

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

DYBOY 2022-11-25 阅读 20

LeetCode 409.最长回文串(简单)_数组

题目描述

LeetCode 409.最长回文串(简单)_回文串_02


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

在构造过程中,请注意 区分大小写 。比如 ​​"Aa"​​ 不能当做一个回文字符串。

LeetCode 409.最长回文串(简单)_数组

示例 1

LeetCode 409.最长回文串(简单)_回文串_02


输入:s = "abccccdd"
输出:7
解释:
我们可以构造的最长的回文串是"dccaccd", 它的长度是 7。

LeetCode 409.最长回文串(简单)_数组

示例 2

LeetCode 409.最长回文串(简单)_回文串_02


输入:s = "a"
输入:1

LeetCode 409.最长回文串(简单)_数组

示例 3

LeetCode 409.最长回文串(简单)_回文串_02


输入:s = "bb"
输入: 2

LeetCode 409.最长回文串(简单)_数组

提示

LeetCode 409.最长回文串(简单)_回文串_02


  • 1 <= s.length <= 2000
  • s 只能由小写和/或大写英文字母组成

LeetCode 409.最长回文串(简单)_数组

题目分析

LeetCode 409.最长回文串(简单)_回文串_02


这道题可以采用哈希表的思路求解,先创建一个数组,该数组用于统计字符出现的次数,遍历字符串统计字符出现的次数,然后设置一个奇数次数标志位,遍历数组,当次数为奇数时,设置奇数出现标志位,并累计出现次数,这里要进行减一操作;而当次数为偶数时,直接累计出现次数。最后返回时要判断奇数次数标志位,如果字符串中出现奇数次的字符,要加一,即该字符放中间,否则直接返回累计的次数。

LeetCode 409.最长回文串(简单)_数组

题解

LeetCode 409.最长回文串(简单)_回文串_02


执行用时: 2 ms

内存消耗: 39.6 MB

class Solution {
public int longestPalindrome(String s) {
// 存储字符出现的次数
int[] arr = new int[58];
// 遍历并统计
for (int i = 0; i < s.length(); ++i) {
arr[s.charAt(i) - 'A']++;
}
// 结果
int res = 0;
// 出现奇数标志
boolean flag = false;
// 获取每个字符出现的次数
for (int count : arr) {
// 次数为 0 忽略
// 次数为奇数
if (count % 2 == 1) {
// 设置出现奇数标志
flag = true;
// 累计到结果要减去一个放中间的字符
res += count - 1;
} else if (count > 1) {
// 次数大于 1 直接累计到结果
res += count;
}
}
// 奇数次出现的字符存在 放中间 要加一
return flag? res + 1: res;
}
}

题目来源:力扣(LeetCode)




举报

相关推荐

0 条评论