반응형
# 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:
Constraints:
|
insert(word) : word 삽입
search(word) : word가 존재하면 true 리턴
strartsWith(prefix) : prefix 로 시작하는 단어가 있으면 true 리턴
# Solution
import collections
# 트라이의 노드
class TrieNode:
def __init__(self):
self.word = False
self.children = collections.defaultdict(TrieNode)
class Trie:
def __init__(self):
self.root = TrieNode()
# 단어 삽입
def insert(self, word: str) -> None:
node = self.root
for char in word:
node = node.children[char]
node.word = True
# 단어 존재 여부 판별
def search(self, word: str) -> bool:
node = self.root
for char in word:
if char not in node.children:
return False
node = node.children[char]
return node.word
# 문자열로 시작 단어 존재 여부 판별
def startsWith(self, prefix: str) -> bool:
node = self.root
for char in prefix:
if char not in node.children:
return False
node = node.children[char]
return True
1. insert : children은 defaultdict(TrieNode)로 디폴트 자동 생성 -> word의 한문자마다 node.children에 넣어줌
모두 넣으면 node.word = True를 통해 단어의 끝 노드 표시
2. search : word의 모든 문자에 대해서 node.children을 확인하면서 없는 단어가 있는 경우 False 리턴
끝까지 있으면 for문 빠져나오고 node.word 값 리턴
3. startsWith : prefix의 문자들에 대해서 존재하지 않으면 False 리턴
prefix의 모든 문자 존재하면 for문 끝나고 True 리턴
# 트라이 ( Trie )
검색트리의 일종으로 일반적으로 키가 문자열인 동적 배열 또는 연관 배열을 저장하는 데 사용되는 정렬된 트리 자료구조
자연어 처리 분야에서 문자열 탐색을 위한 자료구조로 쓰임
문자 개수만큼 자식이 있음 ( 한 문자씩 연결 )
트라이에서는 각 문자열의 길이만큰만 탐색하면 원하는 결과를 찾을 수 있음
반응형
'Algorithm > LEET CODE ( 파이썬 알고리즘 인터뷰)' 카테고리의 다른 글
[LEET CODE] 215. Kth Largest Element in an Array (0) | 2021.05.26 |
---|---|
[LEET CODE] 105. Construct Binary Tree from Preorder and Inorder Traversal (0) | 2021.05.24 |
[LEET CODE] 783. Minimum Distance Between BST Nodes (0) | 2021.05.24 |
[LEET CODE] 938. Range Sum of BST (0) | 2021.05.24 |
[LEET CODE] 1038. Binary Search Tree to Greater Sum Tree (0) | 2021.05.24 |