1.题目
LeetCode:409. 最长回文串
【easy】
给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串。
在构造过程中,请注意区分大小写。比如 “Aa” 不能当做一个回文字符串。
注意:
假设字符串的长度不会超过 1010。
示例 1:
输入:
“abccccdd”
输出:
7
解释:
我们可以构造的最长的回文串是"dccaccd", 它的长度是 7。
2.解题
方法一:数组
因为回文数组左右的字符是一样的,所以左右的字符必定为偶数个,而中间的字符既可以为单独的一个字符也可以为相同的两个字符,所以操作方法如下:
将字符串中所有的字符数量存入数组,然后遍历数组,将所有偶数加入res,将所有大于1的奇数减一加入res,如果有奇数存在则置isOdd为true,最后如果isOdd为true则返回res+1,否则返回res。
java:
class Solution {
public int longestPalindrome(String s) {
int[] array = new int[60];
int res = 0;
boolean isOdd = false;
for (char c : s.toCharArray()) {
array[c - 'A']++;
}
for (int num : array) {
if (num % 2 == 0) res += num;
else if (num > 1 && num % 2 == 1) {
res += num - 1;
isOdd = true;
}
else isOdd = true;
}
if (isOdd) return res + 1;
return res;
}
}
时间复杂度:O(n)
空间复杂度:O(1)
该博客介绍了如何解决LeetCode上的409题——最长回文串。通过创建一个字符计数数组,遍历数组并计算回文串的长度。对于偶数个字符的回文串直接累加,奇数个字符的回文串如果超过1个则减少1并标记有奇数。最后根据是否有奇数个字符决定是否加1。算法的时间复杂度为O(n),空间复杂度为O(1)。

1万+

被折叠的 条评论
为什么被折叠?



