zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    设置github使用的SSH key
    Github的两种协议SSH和HTTPS
    OSChina 周一乱弹 —— 为什么人类和人工智能定要一战
    OSChina 周一乱弹 —— 为什么人类和人工智能定要一战
    APP路由还能这样玩
    APP路由还能这样玩
    APP路由还能这样玩
    APP路由还能这样玩
    掘金技术社区沸点指南(试行版)
    掘金技术社区沸点指南(试行版)
  • 原文地址:https://www.cnblogs.com/swqblog/p/12845661.html
Copyright © 2011-2022 走看看