컴퓨터/LeetCode

LeetCode 819 Most Common Word Easy [Java]

이상한 나그네 2023. 12. 28. 20:58

문제: https://leetcode.com/problems/most-common-word

 

Most Common Word - LeetCode

Can you solve this real interview question? Most Common Word - Given a string paragraph and a string array of the banned words banned, return the most frequent word that is not banned. It is guaranteed there is at least one word that is not banned, and tha

leetcode.com

1. 코드

class Solution {
    public String mostCommonWord(String paragraph, String[] banned) {
        paragraph = paragraph.toLowerCase().replaceAll("[^a-z]", " ");
        Map<String, Integer> hash = new HashMap<>();
        for(String s : paragraph.split(" ")) {
            if(s.isBlank()) continue;
            if(hash.get(s) == null)
                hash.put(s, 1);
            else
                hash.put(s, hash.get(s) + 1);
        }
        for(String ban : banned)
            hash.remove(ban);
        
        String answer = "";
        int max = 0;
        for(String key : hash.keySet()) {
            if(max < hash.get(key)) {
                max = hash.get(key);
                answer = key;
            }
        }
        return answer;
    }
}

2. 설명

class Solution {
    public String mostCommonWord(String paragraph, String[] banned) {
        paragraph = paragraph.toLowerCase().replaceAll("[^a-z]", " ");
        Map<String, Integer> hash = new HashMap<>();
        for(String s : paragraph.split(" ")) {
            if(s.isBlank()) continue;
            if(hash.get(s) == null)
                hash.put(s, 1);
            else
                hash.put(s, hash.get(s) + 1);
        }

먼저 주어진 문자열을 소문자로 통일한 뒤 소문자가 아닌 것은 공백으로 전부 바꿔주며 for-each문을 통해서 공백을 기준으로 문자열을 분리한 것을 s에 저장하는데 공백이 아닌 문자 s를 HashMap을 이용하여 null이라면 Integer값을 1을 아니라면 누적된 값을 put해준다.

        for(String ban : banned)
            hash.remove(ban);

금지된 단어는 HashMap에서 제거한다.

        String answer = "";
        int max = 0;
        for(String key : hash.keySet()) {
            if(max < hash.get(key)) {
                max = hash.get(key);
                answer = key;
            }
        }
        return answer;
    }
}

for-each문을 통해서 HashMap 값을 순차적으로 접근하여 가장 많이 등장하는 단어를 찾아서 반환합니다.