LeetCode-211 添加与搜索单词 - 数据结构设计

 1 class WordDictionary {
 2     //使用什么来存储单词 ------>字典树??
 3 
 4     //字典树
 5     // 1 新建节点
 6     static class TireNode{
 7         boolean flag ; //记录该单词是否出现
 8         Map<Character, TireNode> childNode;
 9         
10         public TireNode()
11         {
12             flag = false;
13             childNode = new HashMap<Character, TireNode>();
14         }
15     }
16     TireNode node;
17    
18     /** Initialize your data structure here. */
19     public WordDictionary() {
20         node = new TireNode(); //新建根节点,不存储任何字符
21     }
22     
23     /** Adds a word into the data structure. */
24     //添加一个单词
25     public void addWord(String word) {
26         char[] letter = word.toCharArray();
27           TireNode curnode = node;
28         for(int i = 0 ; i < letter.length ; i++)
29         {
30             char cur = letter[i];
31             //从根节点寻找
32             if(!curnode.childNode.containsKey(cur)) //子节点不存在就添加
33             {
34                 curnode.childNode.put(cur,new TireNode());
35             }
36             curnode = curnode.childNode.get(cur);
37         }
38         curnode.flag = true;
39         
40     }
41     
42     /** Returns if the word is in the data structure. A word could contain the dot character '.' to represent any one letter. */
43     public boolean search(String word) {
44        TireNode root = node;
45         return backstack(root,word,0);
46     
47       
48 }
49 
50     private boolean backstack(TireNode root , String str, int index)
51     {
52          if(index == str.length())return root.flag;
53          char i = str.charAt(index);
54          if(i == '.')
55          {
56                 //遍历当前节点下的所有子节点
57                 for(Map.Entry<Character, TireNode> entry : root.childNode.entrySet()){
58                     if(entry.getKey() != null && backstack(entry.getValue(),str,index+1))
59                     {
60                         //存在一个就返回true
61                         return true;
62                     }
63                 }
64                 return false;
65          }
66          else
67          {
68             if(!root.childNode.containsKey(i))
69             {
70                   return false;
71             }
72             //直接进入下一个节点
73             return backstack(root.childNode.get(i),str , index+1);
74            
75          }
76 
77 
78     }
79 }

 

posted @ 2020-05-07 21:11  贼心~不死  阅读(149)  评论(0编辑  收藏  举报