问题描述
思路解析
- 因为同时包含大小写字母,直接创建个ASCII表大小的桶来标记
- 又因为是要回文子串,所以偶数个数的一定可以
- 那么同时,对于出现奇数次数的,我没需要他们的次数-1,变为偶数,并且可以标记出现过奇数的数字,这样可以放到中间,结果+1即可
代码
class Solution {
public int longestPalindrome(String s) {
int[] asc = new int[128];
for (char ch : s.toCharArray()) {
asc[ch]++;
}
int res = 0;
boolean flag = false;
for (int i = 0; i < 128; i++) {
if (asc[i] != 0 && asc[i] % 2 == 0) {
res += asc[i];
} else if (asc[i] % 2 == 1) {
flag=true;
res += asc[i] - 1;
}
}
return flag==true?res+1:res;
}
}