第一种解法: HashSet.
将String中的char一个个放入Set中,先检查有没有,如果有的话删除,没有的话加入。
public class Solution {
public int longestPalindrome(String s) {
if (s == null || s.length() == 0) {
return 0;
}
HashSet<Character> hs = new HashSet<Character>();
int result = 0;
for (int i = 0; i < s.length(); i++) {
if (hs.contains(s.charAt(i))) {
hs.remove(s.charAt(i));
result++;
}
else {
hs.add(s.charAt(i));
}
}
if (!hs.isEmpty()) return result * 2 + 1;
return result * 2;
}
}第二种解法:
用一个array
public int longestPalindrome(String s) {
boolean[] map = new boolean[128];
int len = 0;
for (char c : s.toCharArray()) {
map[c] = !map[c]; // flip on each occurrence, false when seen n*2 times
if (!map[c]) len+=2;
}
if (len < s.length()) len++; // if more than len, atleast one single is present
return len;
}第三种解法:
第二种解法的变体。
public int longestPalindrome(String s) {
int[] lowercase = new int[26];
int[] uppercase = new int[26];
int res = 0;
for (int i = 0; i < s.length(); i++){
char temp = s.charAt(i);
if (temp >= 97) lowercase[temp-'a']++;
else uppercase[temp-'A']++;
}
for (int i = 0; i < 26; i++){
res+=(lowercase[i]/2)*2;
res+=(uppercase[i]/2)*2;
}
return res == s.length() ? res : res+1;
}
本文介绍了三种不同的算法实现方式来求解最长回文子串的问题。第一种使用HashSet存储字符并检查重复;第二种利用布尔数组标记字符出现次数;第三种针对大小写字母分别计数,最终返回最大可能长度。
6万+

被折叠的 条评论
为什么被折叠?



