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)