[LeetCode] 1370. Increasing Decreasing String

Chobby·2025년 8월 13일
1

LeetCode

목록 보기
508/582

😎풀이

  1. 해시맵 정의
  2. s 순회
    2-1. 모든 문자의 빈도 해시맵에 기록
  3. 가장 빈도가 높은 문자가 모두 없어질 때까지 정렬 순서에 따라 a-z 혹은 z-a 반복
    3-1. 현재 문자를 result에 추가하고 빈도 1 감소
  4. 합쳐진 문자 반환환
function sortString(s: string): string {
    let result = ''
    const frequent = new Map<string, number>()
    for(const char of s) frequent.set(char, (frequent.get(char) ?? 0) + 1)
    let retryCount = 0
    for(const [_, value] of frequent) retryCount = Math.max(retryCount, value)
    let isAsc = true
    while(retryCount) {
        if(isAsc) {
            for(let i = 97; i < 123; i++) {
                const curChar = String.fromCharCode(i)
                if(!frequent.has(curChar) || frequent.get(curChar) <= 0) continue
                frequent.set(curChar, frequent.get(curChar) - 1)
                result += curChar
            }
        } else {
            for(let i = 122; i > 96; i--) {
                const curChar = String.fromCharCode(i)
                if(!frequent.has(curChar) || frequent.get(curChar) <= 0) continue
                frequent.set(curChar, frequent.get(curChar) - 1)
                result += curChar
            }
        }
        isAsc = !isAsc
        retryCount--
    }
    return result
};  
profile
내 지식을 공유할 수 있는 대담함

0개의 댓글