Leetcode 211. 添加与搜索单词 - 数据结构设计 解题思路及C++实现
生活随笔
收集整理的這篇文章主要介紹了
Leetcode 211. 添加与搜索单词 - 数据结构设计 解题思路及C++实现
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
解題思路:
用字典樹來作為存儲的數(shù)據(jù)結(jié)構(gòu)。
新增單詞的時候,就使用字典樹插入新單詞的方法,與LeetCode 208 題一樣。
在查找某一個字典樹時,使用深度優(yōu)先搜索即可。
?
class WordDictionary { public://定義字典樹中每個節(jié)點的結(jié)構(gòu)struct Node{bool isword = false; //用于標記當前節(jié)點是否為單詞的最后一個字符Node* next[27] = {};};Node* root; //每一個class都有一棵字典樹/** Initialize your data structure here. */WordDictionary() {root = new Node(); //新建一棵字典樹}/** Adds a word into the data structure. */void addWord(string word) {Node* tmp = root;for(auto w: word){if(tmp->next[w - 'a'] == NULL){ //還沒有這個節(jié)點Node* tt = new Node();tmp->next[w - 'a'] = tt; //那就新建節(jié)點}tmp = tmp->next[w - 'a'];}tmp->isword = true; //遍歷完一個單詞}/** 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) {return dfs(word, root, 0);}bool dfs(string word, Node* root, int i){if(!root) return false;if(i >= word.size()) return root->isword; //看看是不是一個完整的單詞if(word[i] != '.'){if(root->next[word[i] - 'a']){return dfs(word, root->next[word[i] - 'a'], i+1);}else return false;}for(auto t: root->next){if(t){if(dfs(word, t, i+1)) return true;}}return false;} };/*** Your WordDictionary object will be instantiated and called as such:* WordDictionary* obj = new WordDictionary();* obj->addWord(word);* bool param_2 = obj->search(word);*/?
?
?
總結(jié)
以上是生活随笔為你收集整理的Leetcode 211. 添加与搜索单词 - 数据结构设计 解题思路及C++实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Leetcode 208. 实现 Tri
- 下一篇: Leetcode 698. 划分为k个相