Python实现简单字典树的方法


Posted in Python onApril 29, 2016

本文实例讲述了Python实现简单字典树的方法。分享给大家供大家参考,具体如下:

#coding=utf8
"""代码实现了最简单的字典树,只支持由小写字母组成的字符串。
在此代码基础上扩展一下,就可以实现比较复杂的字典树,比如带统计数的,或支持更多字符的字典树,
或者是支持删除等操作。
"""
class TrieNode(object):
  def __init__(self):
    # 是否构成一个完成的单词
    self.is_word = False
    self.children = [None] * 26
class Trie(object):
  def __init__(self):
    self.root = TrieNode()
  def add(self, s):
    """Add a string to this trie."""
    p = self.root
    n = len(s)
    for i in range(n):
      if p.children[ord(s[i]) - ord('a')] is None:
        new_node = TrieNode()
        if i == n - 1:
          new_node.is_word = True
        p.children[ord(s[i]) - ord('a')] = new_node
        p = new_node
      else:
        p = p.children[ord(s[i]) - ord('a')]
        if i == n - 1:
          p.is_word = True
          return
  def search(self, s):
    """Judge whether s is in this trie."""
    p = self.root
    for c in s:
      p = p.children[ord(c) - ord('a')]
      if p is None:
        return False
    if p.is_word:
      return True
    else:
      return False
if __name__ == '__main__':
  trie = Trie()
  trie.add('str')
  trie.add('acb')
  trie.add('acblde')
  print trie.search('acb')
  print trie.search('ac')
  trie.add('ac')
  print trie.search('ac')

更多关于Python相关内容可查看本站专题:《Python字典操作技巧汇总》、《Python正则表达式用法总结》、《Python数据结构与算法教程》、《Python Socket编程技巧总结》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
python登录QQ邮箱发信的实现代码
Feb 10 Python
Python实现扣除个人税后的工资计算器示例
Mar 26 Python
Python实现定时精度可调节的定时器
Apr 15 Python
python 日期操作类代码
May 05 Python
关于Pycharm无法debug问题的总结
Jan 19 Python
python计算阶乘和的方法(1!+2!+3!+...+n!)
Feb 01 Python
python利用itertools生成密码字典并多线程撞库破解rar密码
Aug 12 Python
Django错误:TypeError at / 'bool' object is not callable解决
Aug 16 Python
python爬虫模块URL管理器模块用法解析
Feb 03 Python
PyQt5 文本输入框自动补全QLineEdit的实现示例
May 13 Python
python用tkinter实现一个gui的翻译工具
Oct 26 Python
Pandas实现批量拆分与合并Excel的示例代码
May 30 Python
Python中操作符重载用法分析
Apr 29 #Python
Python中绑定与未绑定的类方法用法分析
Apr 29 #Python
Python过滤列表用法实例分析
Apr 29 #Python
Python松散正则表达式用法分析
Apr 29 #Python
python中私有函数调用方法解密
Apr 29 #Python
简单学习Python time模块
Apr 29 #Python
Python中MySQL数据迁移到MongoDB脚本的方法
Apr 28 #Python
You might like
一个程序下载的管理程序(一)
2006/10/09 PHP
生成随机字符串和验证码的类的PHP实例
2013/12/24 PHP
使用php显示搜索引擎来的关键词
2014/02/13 PHP
SAE实时日志接口SDK用法示例
2016/10/09 PHP
php封装json通信接口详解及实例
2017/03/07 PHP
PHP 计算两个特别大的整数实例代码
2018/05/07 PHP
laravel model模型定义实现开启自动管理时间created_at,updated_at
2019/10/17 PHP
php判断某个方法是否存在函数function_exists (),method_exists()与is_callable()区别与用法解析
2020/04/20 PHP
改善你的jQuery的25个步骤 千倍级效率提升
2010/02/11 Javascript
JavaScript数值转换的三种方式总结
2014/07/31 Javascript
页面加载完后自动执行一个方法的js代码
2014/09/06 Javascript
javascript和jquery实现设置和移除文本框默认值效果代码
2015/01/13 Javascript
jQuery学习笔记之jQuery中的$
2015/01/19 Javascript
JavaScript数组随机排列实现随机洗牌功能
2015/03/19 Javascript
jquery.form.js实现将form提交转为ajax方式提交的方法
2015/04/07 Javascript
深入理解Angularjs中的$resource服务
2016/12/31 Javascript
vue.js 左侧二级菜单显示与隐藏切换的实例代码
2017/05/23 Javascript
JS+HTML实现的圆形可点击区域示例【3种方法】
2018/08/01 Javascript
Next.js项目实战踩坑指南(笔记)
2018/11/29 Javascript
nodejs 使用http进行post或get请求的实例(携带cookie)
2019/01/03 NodeJs
js中innerText/textContent和innerHTML与target和currentTarget的区别
2019/01/21 Javascript
[58:09]Spirit vs NB Supermajor小组赛 A组败者组决赛 BO3 第三场 6.2
2018/06/03 DOTA
用python脚本24小时刷浏览器的访问量方法
2018/12/07 Python
python二维码操作:对QRCode和MyQR入门详解
2019/06/24 Python
python实现简单飞行棋
2020/02/06 Python
浅谈keras通过model.fit_generator训练模型(节省内存)
2020/06/17 Python
领先的英国注册在线药房 :Simply Meds Online
2019/03/28 全球购物
写好求职信第一句话的技巧
2013/10/26 职场文书
护理专科毕业推荐信
2013/11/10 职场文书
迅雷Cued工作心得体会
2014/01/27 职场文书
五年级英语教学反思
2014/01/31 职场文书
地理信息科学专业推荐信
2014/09/08 职场文书
教育项目合作协议书格式
2014/10/17 职场文书
学校后勤工作总结2015
2015/05/15 职场文书
小型企业的绩效考核制度模板
2019/11/21 职场文书
Python中seaborn库之countplot的数据可视化使用
2021/06/11 Python