[leetcode, JS] 819. Most Common Word

mxxn·2023년 8월 28일
0

leetcode

목록 보기
51/198

문제

문제 링크 : Most Common Word

틀린 풀이

/**
 * @param {string} paragraph
 * @param {string[]} banned
 * @return {string}
 */
var mostCommonWord = function(paragraph, banned) {
    const reg = /[\{\}\[\]\/?.,;:|\)*~`!^\-_+<>@\#$%&\\\=\(\'\"]/gi;
    let resultMap = new Map();
    paragraph.split(' ').forEach(e => {
        const word = e.toLowerCase().replace(reg, '')
        if(!banned.includes(word)) {
            resultMap.get(word) ? resultMap.set(word, resultMap.get(word)+1) : resultMap.set(word, 1)

        }
    })
    return [...resultMap.entries()].reduce((a,b) => a[1] > b[1] ? a : b)[0]
};
  1. 특수문자를 제거할 정규식을 만들고, 사용할 Map을 만든 후
  2. paragraph를 ' '로 split하여 순회하면서
  3. 각 단어들을 소문자로 바꾸고 정규식을 돌려서, Map에 해당 word의 존재여부에 따라 값 생성
  4. Map에서 가장 큰 value값의 key를 return

    반례
    paragraph = "a, a, a, a, b,b,b,c, c"
    banned = ["a"]

풀이

/**
 * @param {string} paragraph
 * @param {string[]} banned
 * @return {string}
 */
var mostCommonWord = function(paragraph, banned) {
    let arr = paragraph.toLowerCase().split(/\W+/g)
    let map = {}

    for(let word of arr) {
        if(!map[word]) {
            map[word] = 1        
        } else {
            map[word]++
        }
    }
    
   return Object.keys(map).sort((a,b) => {
        return map[b] - map[a]
    }).filter(word => !banned.includes(word) && word !== '')[0]
};
  • 다른 풀이에서 도움을 받아 진행
  1. 정규식을 만들고
\W
- Matches any character that is not a word character (alphanumeric & underscore). 
Equivalent to [^A-Za-z0-9_]

+
- Matches 1 or more of the preceding token.

즉. 특수문자이거나 특수문자를 포함하는 공백들로 split하게 됨
  1. 해당 word들이 map에 있는지 판단
  2. map의 키가 빈값이 아니고 banned에 포함되지 않은 것들 중 value가 제일 큰 key값을 return
  • Runtime 53 ms, Memory 43.9 MB
profile
내일도 글쓰기

0개의 댓글