단어 추가 및 검색 데이터 구조 설계
WordDictionary
클래스를 구현합니다.WordDictionary()
객체를 초기화합니다. void addWord(word)
데이터 구조에 word
를 추가하고 나중에 일치시킬 수 있습니다. bool search(word)
데이터 구조에 true
와 일치하는 문자열이 있으면 word
를 반환하고 그렇지 않으면 false
를 반환합니다. word
에는 점'.'
이 포함될 수 있으며 점은 모든 문자와 일치할 수 있습니다. 예시:
입력
["단어 사전","addWord","addWord","addWord","검색","검색","검색","검색"]
[[],["나쁜"],["아빠"],["미친"],["패드"],["나쁜"],[".ad"],["b.."]]
산출
[널,널,널,널,거짓,참,참,참]
설명
WordDictionary wordDictionary = new WordDictionary();
wordDictionary.addWord("나쁜");
wordDictionary.addWord("아빠");
wordDictionary.addWord("미친");
wordDictionary.search("패드");//거짓 반환
wordDictionary.search("나쁜");//참 반환
wordDictionary.search(".ad");//참 반환
wordDictionary.search("b..");//참 반환
제약:
1 <= word.length <= 25
word
의 addWord
는 영문 소문자로 구성되어 있습니다. word
in search
는 '.'
또는 소문자 영문자로 구성됩니다. 3
쿼리에 대해 word
에 최대 search
개의 점이 있습니다. 104
호출이 addWord
및 search
로 이루어집니다. 해결책:
class Node:
def __init__(self, val=None, children=[], end=False):
self.val = val
self.children = children
self.end = end
class WordDictionary:
def __init__(self):
self.root = Node(val=None, children=[])
def addWord(self, word: str) -> None:
n = len(word)
curr = self.root
for i, c in enumerate(word):
found = False
for node in curr.children:
if node.val == c:
curr = node
found = True
break
if not found:
newcurr = Node(val=c, children=[])
curr.children.append(newcurr)
curr = newcurr
curr.end = True
def search(self, word: str) -> bool:
n = len(word)
paths = [(self.root, 0)]
while len(paths) > 0:
curr, i = paths.pop()
if i == n and curr.end:
return True
if curr.children and i < n:
for c in curr.children:
if word[i] == "." or c.val == word[i]:
paths.append((c, i + 1))
return False
# Your WordDictionary object will be instantiated and called as such:
# obj = WordDictionary()
# obj.addWord(word)
# param_2 = obj.search(word)
Reference
이 문제에 관하여(단어 추가 및 검색 데이터 구조 설계), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/theabbie/design-add-and-search-words-data-structure-n27텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)