题目描述

题目描述

解法

  • 哈希表

    • 键为字符
    • 值为出现的次数
  • 贪心算法

    • 贪心策略:对于偶数串,我们全都要,对于奇数串,我们可以-1再要(变相将其变为偶数串)最后因为只能有一个奇数串占据中间位置(如果有奇数串)我们整体+1;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
class Solution {
public int longestPalindrome(String s) {
int cnt=0;
HashMap<Character,Integer> hashMap=new HashMap<>();
for (int i = 0; i <s.length(); i++) {
if(!hashMap.containsKey(s.charAt(i))){
hashMap.put(s.charAt(i),1);
}
else {
hashMap.put(s.charAt(i),hashMap.get(s.charAt(i))+1);
}
}
//存放进哈希表
for (Integer value : hashMap.values()) {
if(value%2==0){
cnt+=value;
}
else {
cnt+=(value-1);
}

}
if (s.length()>cnt){
cnt++;
}
return cnt;
}
}
  • 时间复杂度:O(N),其中 N 为字符串 s 的长度

链接:409. 最长回文串 - 力扣(LeetCode) (leetcode-cn.com)
来源:力扣(LeetCode)