网站模版的优化,wordpress 清爽主题,做电影网站侵权吗,深圳宝安网站建设公司推荐1. 题目
设计一个支持以下两种操作的数据结构#xff1a;
void addWord(word) bool search(word) search(word) 可以搜索文字或正则表达式字符串#xff0c;字符串只包含字母 . 或 a-z 。 . 可以表示任何一个字母。
示例:
addWord(bad)
addWord(dad
void addWord(word) bool search(word) search(word) 可以搜索文字或正则表达式字符串字符串只包含字母 . 或 a-z 。 . 可以表示任何一个字母。
示例:
addWord(bad)
addWord(dad)
addWord(mad)
search(pad) - false
search(bad) - true
search(.ad) - true
search(b..) - true
说明:
你可以假设所有单词都是由小写字母 a-z 组成的。来源力扣LeetCode 链接https://leetcode-cn.com/problems/add-and-search-word-data-structure-design 著作权归领扣网络所有。商业转载请联系官方授权非商业转载请注明出处。
2. Trie解题
构建Trie树回溯查找遇见.在所有的子树里查找没有遇见.在当前相等的情况下再继续在所有的子树中递归查找
class TrieNode
{
public:char ch;TrieNode *next[26];bool isEnd;TrieNode(char c /):ch(c),isEnd(false) {memset(next, 0, sizeof(TrieNode*)*26);}
};
class Trie
{
public:TrieNode *root;Trie(){root new TrieNode();}~Trie(){destroy(root);}void destroy(TrieNode *root){if(root NULL)return;for(int i 0; i 26; i)destroy(root-next[i]);delete root;}void insert(string str){TrieNode *cur root;for(char s:str){if(cur-next[s-a] NULL)cur-next[s-a] new TrieNode(s);cur cur-next[s-a];}cur-isEnd true;}
};
class WordDictionary {Trie tree;
public:/** Initialize your data structure here. */WordDictionary() {}/** Adds a word into the data structure. */void addWord(string word) {tree.insert(word);}/** 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) {TrieNode *cur tree.root;bool found false;for(int i 0; i 26; i){find(word,cur-next[i],0,found);}return found;}void find(string word, TrieNode *root, int idx, bool found){if(found || !root)return;if(idx word.size()-1){if(root-isEnd)if(word[idx] . || word[idx] root-ch)found true;return;}if((word[idx] ! .root-ch word[idx])|| word[idx] .){ for(int i 0; i 26; i){find(word,root-next[i],idx1,found);}}}
};