211 Add and Search Word - Data structure design
2016-01-04 16:06
351 查看
//Trie 树 + 深搜 public class WordDictionary { public TrieNode root; public WordDictionary(){ root = new TrieNode(); } public void addWord(String word) { if(word==null||word.length()==0){ return; } char[] letters = word.toCharArray(); TrieNode node = root; for(int i=0;i<letters.length;++i){ int pos = letters[i] - 'a'; if(node.son[pos]==null){ node.son[pos] = new TrieNode(); node.son[pos].var = letters[i]; }else{ ++node.son[pos].num; } node = node.son[pos]; } node.isEnd = true; } public boolean search(String word) { if(word==null||word.length()==0){ return false; } char[] letters = word.toCharArray(); TrieNode node = root; return subSearch(root, word, 0); } public boolean subSearch(TrieNode node, String str, int depth){ if(depth==str.length()){ if(node.isEnd==true){ return true; }else{ return false; } } char[] letters = str.toCharArray(); if(letters[depth]=='.'){ boolean res = false; for(int i=0;i<26;++i){ if(node.son[i]!=null){ boolean flag = subSearch(node.son[i], str, depth + 1); if(flag==true){ res = true; } } } return res; }else{ int pos = letters[depth] - 'a'; if(node.son[pos]!=null){ return subSearch(node.son[pos], str, depth + 1); }else{ return false; } } } } class TrieNode { public int num; private int SIZE = 26; public TrieNode[] son; public char var; public boolean isEnd; public TrieNode(){ num = 1; son = new TrieNode[SIZE]; isEnd = false; } }
相关文章推荐
- 记录---待探索
- CSS样式定义的优先级顺序总结
- pip下载默认绕过代理
- ios系统获取ssid
- [Android实例] 带clean按钮的输入框
- java 异步转同步工具类
- iOS crash log 解析 symbol address = stack address - slide 运行时获取slide的api 利用dwarfdump从dsym文件中得到symbol
- openfire3.10.3版 源码编译部署到本地eclipse
- 全面理解Javascript闭包和闭包的几种写法及用途
- MS快速提交作业方法
- opencv学习之轮廓高级应用(轮廓匹配,几何直方图)
- ClickOnce的安装路径
- Java Abstract Class & Interface
- 关于IIS应用程序池的默认参数设置解决
- iptables实现正向代理
- SQL Server表分区
- Nginx相关基础配置详解(详细)
- JSP对URL链接中的中文乱码处理方法总结
- JS中的集中页面跳转的方法
- ZOOKeeper