[LeetCode] 2273. Find Resultant Array After Removing Anagrams

Chobby·2일 전
1

LeetCode

목록 보기
702/710

😎풀이

  1. anagram을 판별할 헬퍼 함수 정의
  2. words 순회
    2-1. 현재 단어와 이전 단어가 anagram인지 판별
    2-2. 참인 경우, 현재 단어를 words에서 제거
    2-3. 거짓인 경우, 탐색 재개
  3. words에 남은 단어 반환
function removeAnagrams(words: string[]): string[] {
    let idx = 1
    while(idx < words.length) {
        const cur = words[idx]
        const prev = words[idx - 1]
        if(!isAnagram(cur, prev)) {
            idx++
            continue
        } 
        words.splice(idx, 1)
    }
    return words
};

function isAnagram(word1: string, word2: string) {
    const frequent1 = new Map()
    const frequent2 = new Map()
    for(const word of word1) {
        frequent1.set(word, (frequent1.get(word) ?? 0) + 1)
    }
    for(const word of word2) {
        frequent2.set(word, (frequent2.get(word) ?? 0) + 1)
    }
    for(const [key, value] of frequent1) {
        if(!frequent2.has(key)) return false
        if(frequent2.get(key) !== value) return false
    }
    for(const [key, value] of frequent2) {
        if(!frequent1.has(key)) return false
        if(frequent1.get(key) !== value) return false
    }
    return true
}
profile
내 지식을 공유할 수 있는 대담함

0개의 댓글