[LeetCode] 3692. Majority Frequency Characters

Chobby·2일 전

LeetCode

목록 보기
947/962

😎풀이

  1. { 문자: 빈도 } 형태로 맵핑하는 charToFreq 정의
  2. charToFreq를 활용하여 { 빈도: [문자1, 문자2, ...] } 형태로 맵핑하는 freqToSet 정의
  3. freqToSet을 순회하며, 빈도 그룹 중 가장 많은 문자를 포함하는 빈도의 그룹 문자를 순서에 상관없이 반환 단, 최대 문자 수가 동일한 그룹이 있다면 빈도가 더 높은 그룹의 문자를 반환
function majorityFrequencyGroup(s: string): string {
    const charToFreq = new Map<string, number>()
    const freqToSet = new Map<number, Set<string>>()
    for(const char of s) {
        const prevFreq = charToFreq.get(char) ?? 0
        const prevSet = freqToSet.get(prevFreq) ?? new Set()
        prevSet.delete(char)
        const nextFreq = prevFreq + 1
        charToFreq.set(char, nextFreq)
        const nextSet = freqToSet.get(nextFreq) ?? new Set()
        nextSet.add(char)
        freqToSet.set(nextFreq, nextSet)
    }
    let maxFreq = 0
    let maxSize = 0
    for(const [freq, set] of freqToSet) {
        const setSize = set.size
        if(setSize < maxSize) continue
        if(setSize === maxSize) {
            maxFreq = Math.max(maxFreq, freq)
        } else {
            maxSize = setSize
            maxFreq = freq
        }
    }
    return [...freqToSet.get(maxFreq)].join('')
};
profile
내 지식을 공유할 수 있는 대담함

0개의 댓글