给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串。
在构造过程中,请注意区分大小写。比如 "Aa" 不能当做一个回文字符串。
注意:
假设字符串的长度不会超过 1010。
示例 1:
输入:
"abccccdd"
输出:
7
解释:
我们可以构造的最长的回文串是"dccaccd", 它的长度是 7。
注意点:
1.使用了一个长度为 128
的数组,存储每个字符出现的次数,这是因为字符的 ASCII 值的范围为[0,128) char类型做运算时会自动将字符转换成对应的整数,注意这种写法与套路(定义一个长度为128的数组,分别在每个字符对应的位置上记录次数)
2. int 运算会向下取整,例如 3/2 结果为1
在本题中 (value/2)*2 如果 value = 2,结果为2,如果 value = 3,结果为2,注意运算规则
public class longestPalindrome {
public int longestPalindrome(String s) {
char[] chars = s.toCharArray();
int[] ints = new int[128];
for (int i = 0; i < chars.length; i++) {
ints[chars[i]]++;
}
int result = 0;
boolean exist = false;
for (int value : ints){
if (value%2 == 1){
exist = true;
}
result += (value/2)*2;
}
if (exist){
result++;
}
return result;
}
}