211. Add and Search Word - Data structure design

就是trie

 1 public class WordDictionary {
 2     public class TrieNode {
 3         public TrieNode[] child;
 4         public char curChar;
 5         public boolean isLeaf;
 6         
 7         public TrieNode() {
 8             child = new TrieNode[26];
 9             isLeaf = false;
10         }
11     }
12     
13     TrieNode root;
14     
15     public WordDictionary() {
16         root = new TrieNode();
17     }
18     
19     // Adds a word into the data structure.
20     public void addWord(String word) {
21         if(word.length() == 0) {
22             return;
23         }
24         TrieNode curNode = root;
25         for(int i = 0; i < word.length(); i++) {
26             char cur = word.charAt(i);
27             int index = cur - 'a';
28             if(curNode.child[index] ==  null) {
29                 curNode.child[index] = new TrieNode();
30                 curNode.child[index].curChar = cur;
31             }
32             curNode = curNode.child[index];
33         }
34         curNode.isLeaf = true;
35     }
36 
37     // Returns if the word is in the data structure. A word could
38     // contain the dot character '.' to represent any one letter.
39     public boolean search(String word) {
40         if(word.length() == 0) {
41             return true;
42         }
43         return searchHelper(word, root);
44     }
45     
46     private boolean searchHelper(String word, TrieNode curNode) {
47         if(word.length() == 0) {
48             return curNode.isLeaf;
49         }
50         char cur = word.charAt(0);
51         String sub = word.substring(1);
52         if(cur != '.') {
53             int index = cur - 'a';
54             if(curNode.child[index] == null) {
55                 return false;
56             }
57             if(curNode.child[index].curChar != cur) {
58                 return false;
59             }
60             return searchHelper(sub, curNode.child[index]);
61         } else {
62             for(int i = 0; i < 26; i++) {
63                 if(curNode.child[i] != null && searchHelper(sub, curNode.child[i])) {
64                     return true;
65                 }
66             }
67         }
68         return false;
69     }
70 }

68行那里要return false因为在62行处,可能没有结果,开始写成true死都调不出来

posted @ 2016-07-22 23:45  warmland  阅读(104)  评论(0编辑  收藏  举报