[LeetCode] 208. Implement Trie (Prefix Tree)
Problem
A trie
(pronounced as “try”) or prefix tree is a tree data structure used to efficiently store and retrieve keys in a dataset of strings. There are various applications of this data structure, such as autocomplete and spellchecker.
Implement the Trie class:
Trie()
Initializes the trie object.void insert(String word)
Inserts the stringword
into the trie.boolean search(String word)
Returnstrue
if the stringword
is in the trie (i.e., was inserted before), andfalse
otherwise.boolean startsWith(String prefix)
Returnstrue
if there is a previously inserted stringword
that has the prefixprefix
, andfalse
otherwise.
Example 1:
Input
["Trie", "insert", "search", "search", "startsWith", "insert", "search"]
[[], ["apple"], ["apple"], ["app"], ["app"], ["app"], ["app"]]
Output
[null, null, true, false, true, null, true]
Explanation
Trie trie = new Trie();
trie.insert("apple");
trie.search("apple"); // return True
trie.search("app"); // return False
trie.startsWith("app"); // return True
trie.insert("app");
trie.search("app"); // return True
Constraints:
1 <= word.length, prefix.length <= 2000
word
andprefix
consist only of lowercase English letters.- At most
3 * 10^4
calls in total will be made toinsert
,search
, andstartsWith
.
Solution
class Trie {
List<String> list;
public Trie() {
this.list = new ArrayList<>();
}
public void insert(String word) {
list.add(word);
}
public boolean search(String word) {
return list.contains(word);
}
public boolean startsWith(String prefix) {
for (int i = 0; i < list.size(); i++)
if (list.get(i).startsWith(prefix))
return true;
return false;
}
}
/**
* Your Trie object will be instantiated and called as such:
* Trie obj = new Trie();
* obj.insert(word);
* boolean param_2 = obj.search(word);
* boolean param_3 = obj.startsWith(prefix);
*/
Explanation
- 문자열을 관리하기 위한 자료구조가 필요한데, 문제를 빠르게 해결하고자 단순히 List를 선택하였다. 그리고 자료구조 List와 String 클래스의 메서드를 활용해서 문제를 해결하였다.
class Trie { List<String> list; public Trie() { this.list = new ArrayList<>(); } public void insert(String word) { list.add(word); } public boolean search(String word) { return list.contains(word); } public boolean startsWith(String prefix) { for (int i = 0; i < list.size(); i++) if (list.get(i).startsWith(prefix)) return true; return false; } }
Leave a comment