코린이의 소소한 공부노트

[LeetCode/Easy] 819. Most Common Word 본문

코딩테스트 풀이/JAVA

[LeetCode/Easy] 819. Most Common Word

무지맘 2023. 3. 31. 01:37

1. Input

1) String paragraph

2) String[] banned

 

2. Output

1) paragraph에 나오는 단어들 중 가장 빈도수가 높은 단어를 반환

- 이때 banned에 있는 단어들은 대상에서 제외한다.

 

3. Constraint

1) 1 <= paragraph.length <= 1000

2) paragraph는 영어 대소문자와 공백문자, !?',;.로 이루어져 있다.

3) 0 <= banned.length <= 100

4) 1 <= banned[i].length <= 10

5) banned[i]는 영어 소문자로만 이루어져 있다.

6) 결과는 반드시 영어 소문자로 반환해야 한다.

 

4. Example

Input: paragraph = "Bob hit a ball, the hit BALL flew far after it was hit.", banned = ["hit"] -> Output: "ball"

설명: hit을 제외한 나머지 단어의 빈도수는 다음과 같다.

- 1: bob, a, the, flew, far, after, it, was

- 2: ball

- 따라서 ball을 반환한다.

 

5. Code

1) 첫 코드(2023/03/31)

import java.util.*;

for(String s : banned)
    paragraph = paragraph.replaceAll(s, "");
paragraph = paragraph.replaceAll("[!?',;.]", " ").toLowerCase();
StringTokenizer token = new StringTokenizer(paragraph);
HashMap<String,Integer> m = new HashMap<String,Integer>();
while(token.hasMoreTokens()){
    String w = token.nextToken();
    m.put(w, m.getOrDefault(w,0)+1);
}
int max = 0; String answer = "";
Iterator it = m.entrySet().iterator();
while(it.hasNext()){
    Map.Entry e = (Map.Entry)it.next();
    int i = (int)e.getValue();
    if(i>max){
        max = i; answer = (String)e.getKey();
    }
}
return answer;