题目:给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串。
在构造过程中,请注意区分大小写。比如 “Aa” 不能当做一个回文字符串。
注意:
假设字符串的长度不会超过 1010。
示例 1:
输入:
“abccccdd”
输出:
7
解释:
我们可以构造的最长的回文串是"dccaccd", 它的长度是 7。
解答一:
class Solution {
public int longestPalindrome(String s) {
if(s.length() == 0) return 0;
if(s.length() == 1) return 1;
char[] c = s.toCharArray();
Arrays.sort(c);
int count1 = 0, count2 = 0;//1-奇数2-偶数
for(int i = 1; i < c.length; i++)
if(c[i - 1] == c[i]){
count2 += 2;
if(i == c.length - 1) break;
if(i == c.length - 2) {
count1++;
break;
}
i++;
}else count1++;
return count1 == 0 ? count2 : count2 + 1;
}
}
解答二:
class Solution {
public int longestPalindrome(String s) {
int sum = 0;
boolean flag = false;
int[] nums = new int[52];
for(int i = 0; i < s.length(); i++){
if(s.charAt(i) >= 'A' && s.charAt(i) <= 'Z') nums[s.charAt(i) - 'A']++;
else nums[s.charAt(i) - 'a' + 26]++;
}
for(int i = 0; i < 52; i++){
if(nums[i] % 2 == 0) sum += nums[i];
else{
sum += (nums[i] - 1);
flag = true;
}
}
return flag == true ? sum + 1 : sum;
}
}