力扣hot100 实现Trie(前缀树) 字典树 一题双解

Problem: 208. 实现 Trie (前缀树)

文章目录

  • 思路
  • 复杂度
  • 💝 TrieNode版
  • 💝 二维数组版

思路

👩‍🏫 宫水三叶

在这里插入图片描述

复杂度

在这里插入图片描述

💝 TrieNode版

public class Trie
{class TrieNode{boolean end;//标记是否有以当前节点为结尾的字符串TrieNode[] ns = new TrieNode[26];}TrieNode root;public Trie(){root = new TrieNode();}public void insert(String word){TrieNode p = root;for (int i = 0; i < word.length(); i++){int u = word.charAt(i) - 'a';
//如果正在遍历的该字母在上一个节点的数组坐标中没有记录,就新建一个字母节点在字典树中if (p.ns[u] == null)//不存在此节点p.ns[u] = new TrieNode();//那就新建节点p = p.ns[u];//每一次生成字母都移动指针到下一个字母节点}p.end = true;// 以当前节点为结尾字符串的个数}public boolean search(String word){TrieNode p = root;for (int i = 0; i < word.length(); i++)//枚举所有字符{int u = word.charAt(i) - 'a';if (p.ns[u] == null)//只要有一个字符不存在就 falsereturn false;p = p.ns[u];}//最后还要看一下是否以当前字符串结尾//例:abcde 路径存在,查 abc,abc存在,但是没有以 c 为结尾的字符串,返回 falsereturn p.end;}public boolean startsWith(String prefix){TrieNode p = root;for (int i = 0; i < prefix.length(); i++){int u = prefix.charAt(i) - 'a';if (p.ns[u] == null)return false;p = p.ns[u];}//所有字符存在即可,前缀即存在return true;}
}/*** Your Trie object will be instantiated and called as such:* Trie obj = new Trie();* obj.insert(word);* boolean param_2 = obj.search(word);* boolean param_3 = obj.startsWith(prefix);*/

💝 二维数组版

//数组版
public class Trie
{int N = 100010;int[][] trie;int[] cnt;int idx = 1;public Trie(){
//		int[i][j] 表示 第 i 行中的 ('a'+j) 是否存在(默认为 0 表示不存在)trie = new int[N][26];cnt = new int[N];// cnt[i] 记录 格子 i 被标记为结尾的次数idx = 1;// 给用到的格子进行编号(从 0 开始避开默认状态)}public void insert(String word){int p = 0;for (int i = 0; i < word.length(); i++){int u = word.charAt(i) - 'a';if (trie[p][u] == 0)trie[p][u] = ++idx;p = trie[p][u];}cnt[p]++;}public boolean search(String word){int p = 0;for (int i = 0; i < word.length(); i++){int u = word.charAt(i) - 'a';if (trie[p][u] == 0)return false;p = trie[p][u];}return cnt[p] != 0;}public boolean startsWith(String prefix){int p = 0;for (int i = 0; i < prefix.length(); i++){int u = prefix.charAt(i) - 'a';if (trie[p][u] == 0)return false;p = trie[p][u];}return true;}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/247495.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一文学习Thrift RPC

Thrift RPC引言 Thrift RPC的特点 Thrift 是一个RPC的框架&#xff0c;和Hessian RPC有什么区别&#xff0c;最重要的区别是Thrift可以做异构系统开发。 什么是异构系统&#xff0c;服务的提供者和服务的调用者是用不同语言开发的。 为什么会当前系统会有异构系统的调用&…

XPath判断当前选中节点的元素类型 Python lxml判断当前Element的元素类型 爬虫爬取页面分元素类型提取纯文本

背景&前言 不知道你们做爬虫的时候&#xff0c;有没有碰到和我一样的情况&#xff1a;将页面提取成纯文本的时候&#xff0c;由于页面中各种链接、加粗字体等&#xff0c;直接提取会造成结果一坨一坨的&#xff0c;非常不规整。有时候还要自己对标题等元素进行修改&#x…

14.java集合

文章目录 概念Collection 接口概念示例 Iterator 迭代器基本操作&#xff1a;并发修改异常增强循环遍历数组&#xff1a;遍历集合&#xff1a;遍历字符串&#xff1a;限制 list接口ListIteratorArrayList创建 ArrayList&#xff1a;添加元素&#xff1a;获取元素&#xff1a;修…

【Unity】粒子贴图异常白边问题

从PS制作的黑底&#xff0c;白光的贴图。放入Unity粒子中&#xff0c;拉远看会有很严重的白边&#xff0c;像马赛克一样。 材质使用&#xff1a;Mobile/Particles/Additive 经测试只使用一张黑色的图片&#xff0c;也会有白边。 解决方案&#xff1a; 关闭黑色底&#xf…

【UE 材质】闪电材质

效果 步骤 1. 新建一个材质这里命名为“M_Lighting” 打开“M_Lighting”&#xff0c;设置混合模式为半透明&#xff0c;着色模型为无光照 在材质图表中添加如下节点 其中&#xff0c;纹理采样节点的纹理是一个线条 此时预览窗口中效果如文章开头所示。

自然语言NLP学习

2-7 门控循环单元&#xff08;GRU&#xff09;_哔哩哔哩_bilibili GRU LSTM 双向RNN CNN 卷积神经网络 输入层 转化为向量表示 dropout ppl 标量 在物理学和数学中&#xff0c;标量&#xff08;Scalar&#xff09;是一个只有大小、没有方向的量。它只用一个数值就可以完全…

第十三章认识Ajax(四)

认识FormData对象 FormData对象用于创建一个表示HTML表单数据的键值对集合。 它可以用于发送AJAX请求或通过XMLHttpRequest发送表单数据。 以下是FormData对象的一些作用&#xff1a; 收集表单数据&#xff1a;通过将FormData对象与表单元素关联&#xff0c;可以方便地收集表…

AF647-羧酸,Alexa-Fluor 647-羧酸,适合用于标记蛋白质

您好&#xff0c;欢迎来到新研之家 文章关键词&#xff1a;AF647-carboxylic-acid &#xff0c;AF647-COOH&#xff0c;AF647-acid&#xff0c;Alexa-Fluor 647-acid&#xff0c;AF647-羧酸&#xff0c;Alexa-Fluor 647-羧酸 一、基本信息 产品简介&#xff1a;AF647&#x…

周报(20240128)

日期&#xff1a;2024.1.22 - 2024.1.28 本周工作&#xff1a; 1. 阅读论文 本周阅读了以下论文&#xff1a; 《BRAU-Net&#xff1a;用于医学图像分割的U形混合CNN-Transformer网络》 背景 精确的医学图像分割对于临床量化、疾病诊断、治疗计划和许多其他应用至关重要。基…

深度学习核心技术与实践之深度学习研究篇

非书中全部内容&#xff0c;只是写了些自认为有收获的部分。 Batch Normalization 向前传播 &#xff08;1&#xff09;三个主要任务&#xff1a;计算出每批训练数据的统计量。 对数据进行标准化 对标…

赛氪荣获“2023天津高新技术企业大会支持单位”

1月23日上午&#xff0c;2023天津市高新技术企业大会新闻发布会在天开高教科技园核心区综合服务中心召开&#xff0c;市高企协以及来自高校、企业、社会组织等80余人现场参会。 大会组委会秘书长张博航介绍到&#xff1a;“本次大会将实现自开办以来的多个首次&#xff0c;首次…

AIDL实践

先贴最后的文件目录&#xff1a; aidl/android/hardware/demo/IFoo.aidl&#xff1a; package android.hardware.demo;import android.hardware.demo.IFooCallback;VintfStability interface IFoo {void doFoo();int doFooWithParameter(int param);void registerCallback(IFo…

案例分析技巧-软件工程

一、考试情况 需求分析&#xff08;※※※※&#xff09;面向对象设计&#xff08;※※&#xff09; 二、结构化需求分析 数据流图 数据流图的平衡原则 数据流图的答题技巧 利用数据平衡原则&#xff0c;比如顶层图的输入输出应与0层图一致补充实体 人物角色&#xff1a;客户、…

力扣3. 无重复字符的最长子串(滑动窗口)

Problem: 3. 无重复字符的最长子串 文章目录 题目描述思路及解法复杂度Code 题目描述 思路及解法 由于题目要求求出字符串中最长的连续无重复字符的最长子串&#xff0c;所以利用这个特性我们可以比较容易的想到利用双指针中的滑动窗口技巧来解决&#xff0c;但在实际的求解中…

[机器学习]简单线性回归——梯度下降法

一.梯度下降法概念 2.代码实现 # 0. 引入依赖 import numpy as np import matplotlib.pyplot as plt# 1. 导入数据&#xff08;data.csv&#xff09; points np.genfromtxt(data.csv, delimiter,) points[0,0]# 提取points中的两列数据&#xff0c;分别作为x&#xff0c;y …

从CNN ,LSTM 到Transformer的综述

前情提要&#xff1a;文本大量参照了以下的博客&#xff0c;本文创作的初衷是为了分享博主自己的学习和理解。对于刚开始接触NLP的同学来说&#xff0c;可以结合唐宇迪老师的B站视频【【NLP精华版教程】强推&#xff01;不愧是的最完整的NLP教程和学习路线图从原理构成开始学&a…

TCP_拥塞控制

引言 24年春节马上就要到了&#xff0c;作为开车党&#xff0c;最大的期盼就是顺利回家过年不要堵车。梦想是美好的&#xff0c;但现实是骨感的&#xff0c;拥堵的道路让人苦不堪言。 在网络世界中&#xff0c;类似于堵车的问题也存在&#xff0c;而TCP&#xff08;Transmissi…

如何使用Everything随时随地远程访问本地电脑搜索文件

文章目录 前言1.软件安装完成后&#xff0c;打开Everything2.登录cpolar官网 设置空白数据隧道3.将空白数据隧道与本地Everything软件结合起来总结 前言 要搭建一个在线资料库&#xff0c;我们需要两个软件的支持&#xff0c;分别是cpolar&#xff08;用于搭建内网穿透数据隧道…

数据结构排序算详解(动态图+代码描述)

目录 1、直接插入排序&#xff08;升序&#xff09; 2、希尔排序&#xff08;升序&#xff09; 3、选择排序&#xff08;升序&#xff09; 方式一&#xff08;一个指针&#xff09; 方式二&#xff08;两个指针&#xff09; 4、堆排序&#xff08;升序&#xff09; 5、冒…

go包与依赖管理

包&#xff08;package&#xff09; 包介绍 Go语言中支持模块化的开发理念&#xff0c;在Go语言中使用包&#xff08;package&#xff09;来支持代码模块化和代码复用。一个包是由一个或多个Go源码文件&#xff08;.go结尾的文件&#xff09;组成&#xff0c;是一种高级的代码…