Leetcode Java Implement Magic Dictionary
업데이트:
문제
코드
class MagicDictionary {
private Map<Integer, List<String>> map;
public MagicDictionary() {
this.map = new HashMap<>();
}
public void buildDict(String[] dictionary) {
for (String word : dictionary) {
List<String> words = this.map.get(word.length());
if (words == null) {
words = new ArrayList<>();
this.map.put(word.length(), words);
}
words.add(word);
}
}
public boolean search(String searchWord) {
List<String> words = this.map.get(searchWord.length());
if (words != null) {
for (String word : words) {
int count = 0;
for (int idx = 0; idx < word.length(); idx++) {
if (word.charAt(idx) != searchWord.charAt(idx)) {
count++;
if (count > 1) {
break;
}
}
}
if (count == 1) {
return true;
}
}
}
return false;
}
}
/**
* Your MagicDictionary object will be instantiated and called as such:
* MagicDictionary obj = new MagicDictionary();
* obj.buildDict(dictionary);
* boolean param_2 = obj.search(searchWord);
*/
결과
설명
- 문자열을 입력받아 데이터 구조 내 단어에서 검색 단어의 한 문자만 수정해서 구성할 수 있는지 검색하는 기능을 수행하는 MagicDictionary 클래스를 완성하는 문제이다.
- 생성자인 MagicDictionary()는 객체를 초기화한다.
- 메서드인 buildDict(String[] dictionary)은 데이터 구조 내 dictionary를 넣어주는 역할을 수행한다.
- 메서드인 search(String searchWord)는 데이터 구조 내 문자들 중 searchWord의 한 문자만 변경한 값과 동일한지 검증한 결과를 반환하는 역할을 수행한다.
- 문제 풀이에 필요한 전역 변수를 정의한다.
- map은 문자열의 길이 별 문자들을 저장할 변수이다.
- 생성자인 MagicDictionary()를 정의한다.
- map을 HashMap으로 초기화 한다.
- 메서드인 buildDict(String[] dictionary)을 정의한다.
- dictionary의 모든 단어를 word에 순차적으로 넣어 아래를 반복한다.
- words에 map 내 word의 길이가 키인 값을 가져온다.
- words가 없는 경우, words를 새 ArrayList로 초기화하고 map에 words 길이의 값에 words를 넣어준다.
- words에 word를 넣고 반복을 계속 수행한다.
- dictionary의 모든 단어를 word에 순차적으로 넣어 아래를 반복한다.
- 메서드인 search(String searchWord)를 정의한다.
- words에 map 내 searchWord의 길이가 키인 값을 가져온다.
- words가 null이 아니면 words의 모든 단어를 word에 순차적으로 넣어 아래를 반복한다.
- count는 변경된 문자의 개수를 넣을 변수로, 0으로 초기화한다.
- word와 searchWord를 비교하여 변경할 단어인 count가 1인 경우, true를 반환한다.
- 반복이 완료되면 한 문자만 변경해서 동일하게 구성할 단어를 찾지 못했으므로, false를 반환한다.
소스
Sample Code는 여기에서 확인 가능합니다.
댓글남기기