'개수가 홀수인 것 중 가장 큰 것을 palindrome에 포함시킨다'라는 로직으로 구현하여서, 주어진 테스트 코드들은 전부 통과했지만 제출하고 나니 실패.
-> 간과한 것은 홀수만큼 존재하는 문자여도 짝수만큼만 palindrome에 추가할 수 있다
는 조금 당연한 사실이었다.
홀수만큼 존재하는 문자들도 -1하여 palindrome 길이에 추가하고, 이후 홀수가 존재했을 시 길이에 1을 추가하도록 구현하니 통과했다.
import java.util.HashMap;
class Solution {
public int longestPalindrome(String s) {
HashMap<Character,Integer> chars = new HashMap<>();
boolean checkOdd=false;
int answer = 0;
for(char c : s.toCharArray()) {
chars.put(c, chars.getOrDefault(c, 0)+1);
}
for(char c : chars.keySet()) {
int curCnt = chars.get(c);
if(curCnt%2 ==0) {
answer += curCnt;
} else {
answer += curCnt-1;
if(!checkOdd) checkOdd = true;
}
}
if(checkOdd) answer+=1;
return answer;
}
}
public int longestPalindrome(String s) {
if(s==null || s.length()==0) return 0;
HashSet<Character> hs = new HashSet<Character>();
int count = 0;
for(int i=0; i<s.length(); i++){
if(hs.contains(s.charAt(i))){
hs.remove(s.charAt(i));
count++;
}else{
hs.add(s.charAt(i));
}
}
if(!hs.isEmpty()) return count*2+1;
return count*2;
}
나는 map을 사용하여 구현했는데, 사실 palindrome의 많은 문제들은 set을 사용해서 구현 가능한 듯하고 성능도 더 좋은 것 같다.
palindrome에 대한 이해 부족으로 인해 단번에 정답을 맞추지 못했던 문제인 것 같다.
palindrome 관련 문제가 나오면 자료구조로 map 대신 set을 활용하여 시간복잡도를 줄이는 방법을 먼저 생각해보아야겠다.