题目描述
给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串。
在构造过程中,请注意区分大小写。比如 “Aa” 不能当做一个回文字符串。
注意:
假设字符串的长度不会超过 1010。
示例 1:
输入: “abccccdd”
输出: 7
解释:
我们可以构造的最长的回文串是"dccaccd", 它的长度是 7。
解题思路
1、什么是回文串,从前往后读和从后往前读的顺序都一样。对于回文串来说,字符的个数是奇数有且只有一个,在回文串的中心点,其他的字符的个数都是偶数
2、代码逻辑:
(1)用数组统计原字符串中字符的个数
(2)取偶数个字符,分别放在左右两边(cnt/2) * 2
(3)如果比原字符的长度少,即还有剩下的字符,挑一个字符放在中心点,构成回文串
代码
class Solution {
public int longestPalindrome(String s) {
int[] cnts = new int[256];
for(char c : s.toCharArray()){
cnts[c]++;
}
int res = 0;
for(int cnt : cnts){
res += (cnt/2) * 2;
}
if(res < s.length())
res++;
return res;
}
}