[leetcode] 211. Add and Search Word - Data structure 디자인 문제 해결 보고서
Design a data structure that supports the following two operations:
void addWord(word)
bool search(word)
search(word) can search a literal word or a regular expression string containing only letters
a-z
or .
. A .
means it can represent any one letter. For example:
addWord("bad")
addWord("dad")
addWord("mad")
search("pad") -> false
search("bad") -> true
search(".ad") -> true
search("b..") -> true
Note: You may assume that all words are consist of lowercase letters
a-z
. 사고방식: 사전 트리를 실현하고 추가와 찾기 작업을 완성합니다.
그 원리는 각 결점마다 26명의 아이 결점이 있고, 한 결점의 26명의 아이 결점은 처음에는 NULL로 기본값으로 되어 있다.만약에 우리가 단어를 추가하려고 한다면 이 단어는 뿌리 노드에서 아래로 층층이 성장할 것이다. 단어가 끝날 때 우리는 마지막 결점에 표시를 한다. 이것은 뿌리 노드에서 이 결점까지의 경로가 하나의 단어라는 것을 의미한다.
단어를 추가할 때 공통 접두사 단어가 경로를 공유하기 때문에 사전 트리는 메모리를 크게 절약할 수 있습니다.
코드는 다음과 같습니다.
class WordDictionary {
public:
typedef struct Trie
{
vector<Trie*> child;
bool isWord;
Trie(): child(vector<Trie*>(26, NULL)), isWord(false){}
}Trie;
WordDictionary():root(new Trie()){}
// Adds a word into the data structure.
void addWord(string word) {
Trie* tem = root;
for(auto ch: word)
{
if(tem->child[ch - 'a'] == NULL)// ch ,
tem->child[ch - 'a'] = new Trie();
tem = tem->child[ch - 'a'];
}
tem->isWord = true;//
}
bool DFS(string str, Trie* node)
{
if(node == NULL) return false;
if(str.size() ==0) return node->isWord;// ,
if(str[0] != '.')// .
{
if(node->child[str[0]-'a'] == NULL) return false;
return DFS(str.substr(1), node->child[str[0]-'a']);
}
for(int i = 0; i < 26; i++)// .,
if(DFS(str.substr(1), node->child[i]) == true)
return true;
return false;
}
// Returns if the word is in the data structure. A word could
// contain the dot character '.' to represent any one letter.
bool search(string word) {
Trie* tem = root;
return DFS(word, tem);
}
private:
Trie* root;
};
// Your WordDictionary object will be instantiated and called as such:
// WordDictionary wordDictionary;
// wordDictionary.addWord("word");
// wordDictionary.search("pattern");
참조:https://leetcode.com/discuss/45435/c-using-trie-and-dfs-for-search-easy-understand-solution
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
python 문자열 입력으로 모든 유효한 IP 주소 생성(LeetCode 93번 문제)이 문제의 공식 난이도는 Medium으로 좋아요 1296, 반대 505, 통과율 35.4%를 눌렀다.각 항목의 지표로 말하자면 보기에는 약간 규범에 맞는 것 같지만, 실제로도 확실히 그렇다.이 문제의 해법과 의도는 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.