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实现的防DDoS脚本
Feb 08 Python
用Python实现一个简单的多线程TCP服务器的教程
May 05 Python
Django中模版的子目录与include标签的使用方法
Jul 16 Python
caffe binaryproto 与 npy相互转换的实例讲解
Jul 09 Python
python框架django项目部署相关知识详解
Nov 04 Python
python支持多线程的爬虫实例
Dec 21 Python
python cv2在验证码识别中应用实例解析
Dec 25 Python
PyTorch实现ResNet50、ResNet101和ResNet152示例
Jan 14 Python
基于Tensorflow高阶读写教程
Feb 10 Python
opencv+python实现均值滤波
Feb 19 Python
Python3 webservice接口测试代码详解
Jun 23 Python
详解解决jupyter不能使用pytorch的问题
Feb 18 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
php_imagick实现图片剪切、旋转、锐化、减色或增加特效的方法
2014/12/15 PHP
php如何实现不借助IDE快速定位行数或者方法定义的文件和位置
2017/01/17 PHP
PHP给前端返回一个JSON对象的实例讲解
2018/05/31 PHP
PHP实现负载均衡session共享redis缓存操作示例
2018/08/22 PHP
thinkphp框架类库扩展操作示例
2019/11/26 PHP
基于node.js的快速开发透明代理
2010/12/25 Javascript
jQuery 无限级菜单的简单实例
2014/02/21 Javascript
jquery、js调用iframe父窗口与子窗口元素的方法整理
2014/07/31 Javascript
javascript实现对表格元素进行排序操作
2015/11/18 Javascript
javascript与jquery中的this关键字用法实例分析
2015/12/24 Javascript
实例解析jQuery中proxy()函数的用法
2016/05/24 Javascript
分享JS数组求和与求最大值的方法
2016/08/11 Javascript
详解微信小程序开发之——wx.showToast(OBJECT)的使用
2017/01/18 Javascript
基于jQuery Easyui实现登陆框界面
2017/07/10 jQuery
javascript填充默认头像方法
2018/02/22 Javascript
angularjs数组判断是否含有某个元素的实例
2018/02/27 Javascript
小程序hover-class点击态效果实现
2019/02/26 Javascript
如何从零开始手写Koa2框架
2019/03/22 Javascript
vue实现绑定事件的方法实例代码详解
2019/06/20 Javascript
js实现简单抽奖功能
2020/11/24 Javascript
[25:45]2018DOTA2亚洲邀请赛4.5SOLO赛 Sylar vs Paparazi
2018/04/06 DOTA
python获取mp3文件信息的方法
2015/06/15 Python
Python多进程分块读取超大文件的方法
2016/04/13 Python
Python3中使用urllib的方法详解(header,代理,超时,认证,异常处理)
2016/09/21 Python
Python获取CPU、内存使用率以及网络使用状态代码
2018/02/08 Python
Python中的上下文管理器和with语句的使用
2018/04/17 Python
django框架创建应用操作示例
2019/09/26 Python
Ranorex通过Python将报告发送到邮箱的方法
2020/01/12 Python
django 获取字段最大值,最新的记录操作
2020/08/09 Python
通过实例了解python__slots__使用方法
2020/09/14 Python
2014年社区庆元旦活动方案
2014/03/08 职场文书
高中竞选班长演讲稿
2014/04/24 职场文书
法制宣传教育方案
2014/05/09 职场文书
人力资源管理毕业求职信
2014/08/05 职场文书
2019个人年度目标制定攻略!
2019/07/12 职场文书
Python标准库pathlib操作目录和文件
2021/11/20 Python