点击打开链接
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string>
#include <cstring>
#include <string.h>
#include <algorithm>
#include <vector>
#include <numeric>
#include <limits>
#include <math.h>
#include <queue>
#include <map>
#include <set>
#include <stack>
using namespace std;
class WordDictionary {
public:
const int R=26;
struct Node{
bool is_word = false;
Node *next = NULL;
};
Node root;
/** Initialize your data structure here. */
WordDictionary() {
}
/** Adds a word into the data structure. */
void addWord(string word) {
if(word.empty()) return;
Node* x = &root;
int p =0;
while (p<word.size()) {
if(!(x->next)) x->next = new Node[R];
x = & x->next[word[p++]-'a'];
}
x->is_word = true;
}
bool dfs(string str, int pos, Node* root)
{
if(root==NULL) return false;
if(str.length()== pos && root->is_word) return true;
if(str.length()==pos) return false;
if(root->next==NULL) return false;
if(str[pos]!='.')
return dfs(str, pos+1, &root->next[str[pos]-'a']);
else
for(int i=0; i<26; i++){
if(dfs(str, pos+1, &root->next[i])) 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) {
Node* x= &root;
return dfs(word, 0, x);
}
};
/**
* Your WordDictionary object will be instantiated and called as such:
* WordDictionary obj = new WordDictionary();
* obj.addWord(word);
* bool param_2 = obj.search(word);
*/
int main()
{
// Solution temple;
return 0;
}