一、题目分析
使用字符串中的字符,任意组合
二、java实现
class Solution {
public int longestPalindrome(String s) {
if (s == null) return 0;
Map<Character, Integer> map = new HashMap<>();
for (int i = 0; i < s.length(); i++){
if (map.containsKey(s.charAt(i))){
map.replace(s.charAt(i), map.get(s.charAt(i)) + 1);
} else {
map.put(s.charAt(i), 1);
}
}
int result = 0;
for (Map.Entry<Character, Integer> entry : map.entrySet()){
if (entry.getValue() % 2 == 0) {
result += entry.getValue();
} else {
result += entry.getValue() - 1;
}
}
if (result < s.length()) result++;
return result;
}
}
使用hashmap,记录每个字符出现的个数。
然后就是奇数偶数的问题,奇数个的,
如果是偶数个,就可以全部放在回文串里,如果是奇数个,如果是1,出现一次,就不加入到回文串中(暂时不添加),如果是大于1的奇数,可以从中选出偶数个,加入到回文串中,比如3-1=2,回文串长度+2.
最后的判断result和s.length比较,如果相等,说明全部是偶数个。不相等,说明存在奇数个,+1是可以选择一个中心位。这是因为回文串长度可以是偶数也可以是奇数,添加一个中心位,使得回文串长度+1.
这个中心位字符可以任意选择