😎풀이

  1. 단어 빈도 저장
  2. 모든 빈도 순회
    2-1. 빈도가 짝수라면 팰린드롬을 만들 수 있으므로 길이에 추가
    2-2. 빈도가 홀수라면, 하나의 문자를 덜 쓰고 짝수개로 맞출 수 있으므로 -1만큼 추가하고 홀수 단어가 있음을 표시
  3. 길이를 반환하되, 홀수개의 단어가 있었다면, 한 문자까지는 중앙에 배치하여 팰린드롬을 만들 수 있으므로 + 1 하여 length 반환
function longestPalindrome(s: string): number {
    const frequent = new Map<string, number>()
    for(const char of s) frequent.set(char, (frequent.get(char) ?? 0) + 1)
    let length = 0
    let foundOdd = false
    for(const [_, value] of [...frequent]) {
        if((value & 1) === 1) {
            length += value - 1
            foundOdd = true
        }
        else length += value 
    }
    return length + (foundOdd ? 1 : 0)
};
profile
내 지식을 공유할 수 있는 대담함

0개의 댓글