Skip to content

Commit c580d4b

Browse files
author
jinvicky
committed
word dictionary solution
1 parent 66d8c5d commit c580d4b

File tree

1 file changed

+44
-0
lines changed

1 file changed

+44
-0
lines changed
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
class WordDictionary {
2+
3+
private static class Node {
4+
Node[] next = new Node[26];
5+
boolean isEnd;
6+
}
7+
8+
private final Node root = new Node();
9+
10+
public WordDictionary() {}
11+
12+
public void addWord(String word) {
13+
Node cur = root;
14+
for (int k = 0; k < word.length(); k++) {
15+
char ch = word.charAt(k);
16+
int i = ch - 'a';
17+
if (cur.next[i] == null) cur.next[i] = new Node();
18+
cur = cur.next[i];
19+
}
20+
cur.isEnd = true;
21+
}
22+
23+
public boolean search(String word) {
24+
return dfs(word, 0, root);
25+
}
26+
27+
private boolean dfs(String word, int idx, Node node) {
28+
if (node == null) return false;
29+
if (idx == word.length()) return node.isEnd;
30+
31+
char ch = word.charAt(idx);
32+
if (ch == '.') {
33+
// 모든 가능 문자로 한 글자 매칭
34+
for (int c = 0; c < 26; c++) {
35+
if (node.next[c] != null && dfs(word, idx + 1, node.next[c])) {
36+
return true;
37+
}
38+
}
39+
return false;
40+
} else {
41+
return dfs(word, idx + 1, node.next[ch - 'a']);
42+
}
43+
}
44+
}

0 commit comments

Comments
 (0)