반응형
https://leetcode.com/problems/most-common-word/description/
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 that the answer is unique.
The words in paragraph are case-insensitive and the answer should be returned in lowercase.
⚠️ 금지 문자열 제외
⚠️ 소문자로 리턴
⚠️ 구두점은 무시
➡️ 입력 예제
Input: paragraph = "Bob hit a ball, the hit BALL flew far after it was hit.", banned = ["hit"]
Output: "ball"
Input: paragraph = "a.", banned = []
Output: "a"
✅ 풀이
1. 금지 문자 리스트 중복 제거해 생성 => Set
2. 입력 문자 리스트 처리
- 구두점 생략
- 소문자로 변환
3. 금지 문자 확인 후 문자 하나씩 갯수 세어 결과 저장 => Map<String, Integer>
4. 결과 Map 중 가장 숫자 Value 높은 문자 Key 반환
✨ 코드
class Solution {
public String mostCommonWord(String paragraph, String[] banned) {
// 금지 문자 리스트 생성
Set<String> banSet = new HashSet<>(Arrays.asList(banned));
// 입력 문자 리스트 처리
String[] words = paragraph.replaceAll("\\W+", " ").toLowerCase().split(" ");
Map<String, Integer> cnt= new HashMap<>();
// 개수 세기
for (String w : words) {
if (!banSet.contains(w)) {
cnt.put(w, cnt.getOrDefault(w, 0) + 1);
}
}
return Collections.max(cnt.entrySet(), Map.Entry.comparingByValue()).getKey();
}
}
💡 KeyPoint
- 구두점 찾아내기
- 정규식 [^A-Za-Z0-9] : 알파벳 대문자, 알파벳 소문자, 숫자가 아닌 모든 문자열
- \\W+ : 워드 문자(알파벳 대문자, 알파벳 소문자, 숫자)가 아닌 모든 문자열
- getOrDefault("단어", "출력할 단어") : 해당 단어가 Map에 존재하면 정해준 값 출력
- getOrDefault키가 이미 존재할 경우 > 그 키의 값을 반환함 + 1
- 키가 존재하지 않는 경우 > 그대로 0 반환 + 1
참고
https://ebook-product.kyobobook.co.kr/dig/epd/ebook/E000005441444
코드
https://github.com/recordbuffer/Coding_Test/tree/main/Java_Algorithm
반응형
'JAVA > LeetCode' 카테고리의 다른 글
Leetcode 배열 42 Trapping Rain Water (java) (1) | 2023.11.18 |
---|
댓글