当前位置: 首页 > news >正文

优质聊城做网站公司资源搜索神器

优质聊城做网站公司,资源搜索神器,wordpress文章排版插件,wordpress MU多重筛选心路历程: 一道题干进去了一个下午,单纯从解题角度可以直接用python的集合就很简单地解决(不知道是不是因为python底层的set()类)。后来从网上看到这道题应该从前缀树的角度去做,于是花了半个多小时基于字典做了前缀树…

在这里插入图片描述

心路历程:

一道题干进去了一个下午,单纯从解题角度可以直接用python的集合就很简单地解决(不知道是不是因为python底层的set()类)。后来从网上看到这道题应该从前缀树的角度去做,于是花了半个多小时基于字典做了前缀树的做法;后来想锻炼一下多叉树的做法,又花了一个多小时尝试。
前缀的含义是一个字符串的包含第一个元素作为开始的子序列,在代码自动补全里应用很多。

注意的点:

1、在利用字典建立多叉树的时候,一般是利用循环不变量的原则,每一层赋值root,然后判断当前层是否已经之前创建过。
2、利用class建立多叉树的时候,注意不要在初始化默认参数处设置children=[],否则所有示例化对象的children都指向同一个内存(花了很长时间找这个bug)。
3、注意在一个单词添加完之后,结尾要跟上一个结束判断符来区分到底是一个完整的单词还是一个其他长单词的一个部分。
4、写出来bug是很正常的事情,只要按照顺序检查输入输出关系即可debug。

解法一:python原生集合

class Trie:def __init__(self):self.set = set()self.prefixset = set()def insert(self, word: str) -> None:self.set.add(word)for j in range(1, len(word)+1):  # 这块是取不到的,所以要加一,两个取不到的叠加self.prefixset.add(word[:j])def search(self, word: str) -> bool:if word in self.set:return Trueelse:return Falsedef startsWith(self, prefix: str) -> bool:# return True 直接return true可以过一半测试用例if prefix in self.prefixset:return Trueelse:return False

解法二:用字典实现多叉前缀树

class Trie:def __init__(self):  # 用字典做一个前缀树self.dict = {}self.end = "!"def insert(self, word: str) -> None:root = self.dictfor i in range(len(word)):if word[i] not in root.keys():root[word[i]] = {}  # 循环不变量root = root[word[i]]root[self.end] = Nonedef search(self, word: str) -> bool:# print(self.dict)root = self.dictfor c in word:if c in root.keys():root = root[c]else:return False# 还得保证单词结尾if self.end in root.keys():return Trueelse:return Falsedef startsWith(self, prefix: str) -> bool:root = self.dictfor c in prefix:if c in root.keys():root = root[c]else:return Falsereturn True 

解法三:利用多叉树类实现前缀树(对比起来还是用字典实现多叉树方便一些)

class TreeNode:def __init__(self, val=None):  # 不能在这里给children=[]赋值然后再self.children = children,否则所有实例都维护一个列表内存(浅拷贝问题)self.val =valself.children = []  # !!!def values(self):values = []for eve in self.children:values.append(eve.val)return valuesdef findvalindex(self, aval):for i in range(len(self.children)):if self.children[i].val == aval:return iassert Falseclass Trie:def __init__(self):  # 用多叉树作前缀树self.root = TreeNode()def insert(self, word: str) -> None:root = self.rootfor i in range(len(word)):if word[i] not in root.values():node = TreeNode(word[i])root.children.append(node)root = node  # 这句话无法赋值??有赋值作用,并且内存也确实变了,但是不知道为什么.values()方法都赋值到了根节点上去-》因为浅拷贝到了一个列表上# print(root, root.children[-1])else:vindex = root.findvalindex(word[i])root = root.children[vindex]leaf = TreeNode('!')root.children.append(leaf)  # 加入结束符号def search(self, word: str) -> bool:root = self.rootfor c in word:if c in root.values():vindex = root.findvalindex(c)root = root.children[vindex]else:return False# print(root.values())# 此时root的children中应该包含leafif '!' in root.values():return Trueelse:return Falsedef startsWith(self, prefix: str) -> bool:root = self.rootfor c in prefix:if c in root.values():vindex = root.findvalindex(c)root = root.children[vindex]else:return Falsereturn True # 不需要是none
http://www.yayakq.cn/news/431680/

相关文章:

  • 学前教育网站建设山东省离线地图导航下载
  • 制作企业网站首页效果图网络营销推广方法和应用场景
  • 温州网站设计哪家公司好遵义建站
  • dedecms做电商网站厦门人才网官方网站
  • 上海公司网站设计wordpress文章迁移到dz论坛
  • 哪些网站用python做服务框架办个网站卖什么好处
  • iis 网站目录权限水平线设计公司官网
  • 中国采购网官方网站怎么让百度收录我的网站
  • 多语言外贸网站建设网站开发主管招聘
  • 帮助做职业规划的网站提示网站有风险
  • 创建网站怎么弄深圳工程交易中心官网
  • 怎么查找网站建设新手做外贸怎么学
  • 系统管理网站网站建设怎么销售
  • 企业网站seo诊断报告2023新闻头条最新消息今天
  • 外国优秀网站设计下载网站后怎么做
  • dedecms 食品网站模板1800做网站因为专业
  • 便宜的网站设计湖南省建设工程施工合同
  • 网站有死链怎么办网页设计html代码大全划掉线
  • asp做的药店网站模板如何搭建平台运营体系
  • 重生做网站的小说开创云网站建设支持
  • 网站建设的品牌广州做网站建设的公司哪家好
  • 网站模板登录模块学校网站建设与维护方案
  • 只有一个页面的网站怎么做外国建筑设计网站
  • 长沙网站建设公司联系方式邮箱注册网站查询
  • 模板网站有利于做seo吗住房和城乡建设部建造师官网
  • 我用织梦5.7做个网站应该把淘宝客店铺链接放到哪网站开发公司怎么接单
  • 石家庄网站建设q.479185700棒网站设计成品网站
  • 备案名称网站名称没有自己的网站做百度竞价
  • 长沙网站设计的公司linchong WordPress
  • 站长网站建网站英文