(Trie Tree)字典树
(Trie Tree)字典树
场景:在n个字符串中查找某个字符串。
暴力匹配,时间复杂度为O(nm),m为字符串平均长度,效率过低。
字典查找单词"fly",首先查找’f’,然后查找’l’,最后查找’y’,实现查找,字典树就是完成模拟查找过程。
例:
- be
- bee
- may
- man
- mom
- he
通过这6个单词构造字典树:

在每次单词的节点处设置标记,是否为单词结尾。
字典树应用:
- 字符串检索
- 统计单词出现的次数
- 前缀匹配
- 字符串排序
HDU1251
问题链接
问题:
Ignatius最近遇到一个难题,老师交给他很多单词(只有小写字母组成,不会有重复的单词出现),现在老师要他统计出以某个字符串为前缀的单词数量(单词本身也是自己的前缀).
输入:
输入数据的第一部分是一张单词表,每行一个单词,单词的长度不超过10,它们代表的是老师交给Ignatius统计的单词,一个空行代表单词表的结束.第二部分是一连串的提问,每行一个提问,每个提问都是一个字符串.
注意:本题只有一组测试数据,处理到文件结束.
输出:
对于每个提问,给出以该字符串为前缀的单词的数量.
输入样例:
banana
band
bee
absolute
acmba
b
band
abc
输出样例:
2
3
1
0
使用Map:
import java.util.*;class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);//单词前缀MapMap<String, Integer> prefix = new HashMap<>();while (true) {String s = in.nextLine();if (s.equals("")) {break;}//空行单词表结束for (int i = s.length(); i > 0; i--) {//向map里添加数据String tmp = s.substring(0, i);prefix.put(tmp, prefix.getOrDefault(tmp, 0) + 1);}}while (in.hasNext()) {String query = in.nextLine();System.out.println(prefix.getOrDefault(query, 0));}}}
使用数组构造字典树结构体:
import java.util.*;class Main {static int[][]trie=new int[1000010][26];//数组定义字典树,存储下一个字符的位置static int[]num=new int[1000010];//以某个字符为前缀的单词数量static int pos=1;//当前新分配存储数量/*** 向字典树中插入单词*/public static void insert(char[]str){int p=0;for (int i = 0; i < str.length; i++) {int n=str[i]-'a';if(trie[p][n]==0){trie[p][n]=pos++;}p=trie[p][n];num[p]++;}}/**** @param str 字符数组* @return 以字符串为前缀的单词数量*/public static int find(char[] str){int p=0;for (int i = 0; i < str.length; i++) {int n=str[i] - 'a';if(trie[p][n] == 0)return 0;p=trie[p][n];}return num[p];}public static void main(String[] args) {Scanner in = new Scanner(System.in);while (true) {String s = in.nextLine();if (s.equals("")) {break;}//空行单词表结束char[]chs=s.toCharArray();insert(chs);}while (in.hasNext()) {String query = in.nextLine();char[]chs=query.toCharArray();System.out.println(find(chs));}}}相关文章:
(Trie Tree)字典树
(Trie Tree)字典树 场景:在n个字符串中查找某个字符串。 暴力匹配,时间复杂度为O(nm),m为字符串平均长度,效率过低。 字典查找单词"fly",首先查找’f’,然后…...
MQTT的学习之Mosquitto集群搭建
文章钢要: 1、进行双服务器搭建 2、进行多服务器搭建 一、Mosquitto的分布式集群部署 如果需要做并发量很大的时候就需要考虑做集群处理,但是我在查找资料的时候发现并不多,所以整理了一下,搭建简单的Mosquitto集群模式。 首…...
TS面向对象
第二章:面向对象 面向对象简而言之就是程序之中所有的操作都需要通过对象来完成。 举例来说: 操作浏览器要使用window对象操作网页要使用document对象操作控制台要使用console对象 一切操作都要通过对象,也就是所谓的面向对象,…...
Python进阶-----高阶函数map() 简介和使用
目录 简介: 编辑 示例: 示例(1):输出map()函数返回值(迭代器)结果 示例(2):与循环对比 示例(3):字符串转列表 示…...
GPU会变得更便宜吗?GPU 定价更新
在英伟达和AMD发布了一段时间的一致显卡之后,事情在二月份已经降温。没有新的GPU可以谈论,没有特别惊人的交易或任何东西,但仍然值得看看市场现在的表现如何,因为它已经稳定下来,以及我们在未来几个月可以期待什么。过…...
IDEA如何创建一个springboot项目
要想进入springboot的殿堂,你的跨进springboot的门槛,下面就是使用IDEA初始话一个简单的springboot项目。 选择Create New Project 选择Spring Initializer——>选择对应的jdk版本——>Default默认在线构建,需要联网噢 选择自己想写…...
Netty核心功能以及线程模型
目录 Netty核心功能以及线程模型 Netty初探 Netty的使用场景: Netty通讯示例 Netty线程模型 Netty模块组件 Netty核心功能以及线程模型 Netty初探 NIO 的类库和 API 繁杂, 使用麻烦: 需要熟练掌握Selector、 ServerSocketChannel、 So…...
【并发编程二十】协程(coroutine)_协程库
【并发编程二十】协程(coroutine)一、线程的缺点二、协程三、优点四、个人理解五、协程库1、window系统2、unix系统(包括linux的各个版本)2.1、makecontext2.2、swapcontext2.3、setcontext3、第三方库3.1、Boost.Coroutine23.2、…...
c语言入门-5-字符串
c语言入门-5-字符串正文1、字符串怎么用方式一方式二2、字符串的长度深度解析1 字符串的特性2 \0 的含义3 ascii码表下一篇正文 1、字符串怎么用 方式一 // 字符串的标准使用方式,用char类型的数组表示字符串 #include<stdio.h> int main() {char arr[] &…...
[Ansible系列]ansible roles
目录 一. Roles简介 二. Roles基本构成 三. Role使用 3.1 playbook中引用roles 3.2 pre_tasks 和 post_tasks 3.3 role的依赖 四. Ansible Galaxy 一. Roles简介 在Ansible中,role是将playbook分割为多个文件的主要机制。它大大简化了复杂playbook…...
冯诺依曼体系结构与操作系统的理解
✅<1>主页:我的代码爱吃辣 📃<2>知识讲解:操作系统 💬<3>前言:今天来介绍一下冯诺依曼体系结构,和操作系统的理解。 目录 1.冯诺依曼体系结构 冯诺依曼体系的工作原理: 为…...
API接口签名验证
文章目录一、使用背景二、实现方案三、具体流程四、优化五、代码实现六、后续优化一、使用背景 过去对于接口的验证我一般都是直接在登录时为用户发放token,用户在随后的操作中携带了token则允许请求。 但是这样的验证方式存在有一定的问题,如果token被…...
Keettle (pdi-ce) 整库多表迁移(避坑)
使用开源免费 Keettle 工具 1.下载与安装 官网地址:下载 下载9.3.0以上的,6.1、7.1我都尝试过,6.1导致很多莫名其妙问题,7.1数据库可以连接和预览,迁移的时候就会出现事务读问题,最后解决这个问题后&…...
搭建私人《我的世界》服务器,使用Cpolar内网穿透更简单
文章目录1.前言2.本地服务器搭建2.1 设置环境变量2.2 进行《我的世界》服务器端设置2.3 测试和使用3.本地MC服务器的内网穿透3.1.Cpolar云端设置3.2.Cpolar本地设置3.3.测试和使用4.结语1.前言 要说去年游戏圈的重磅大瓜,想必网易和暴雪的分家必能上榜。虽然两家大…...
map和set的使用
文章目录关联式容器树形结构的关联式容器setinsert增减erase删除multiset修改mappair<key,value>insertoperator[] 的引入insert和operator[]的区别multimap小结map的使用统计最喜欢吃的前几种水果前K个高频单词,返回单词的频率由高到低,频率相同时࿰…...
常用正则表达式大全
链接...
注意,摸鱼程序员常用的9个小技巧,早点下班不秃头
9个养生小技巧,祝大家不秃头嗨害大家好鸭! 我是小熊猫~毕竟摸鱼一时爽,一直摸一直爽嘛~一、整理字符串输入二、迭代器切片(Slice)三、跳过可迭代对象的开头四、只包含关键字参数的函数 (kwargs)五、创建支持「with」语…...
【Linux】文件时间-ACM
文章目录文件时间-acmAccessChangeModify文件时间-acm 我们可以使用stat 文件名的方式查看对应的文件的时间信息 Access 表示文件最近一次被访问的时间 文件的访问 实际也就是文件的读取 实际操作中,文件的Access时间可能没有变化,这是因为在新的Linux内核中,Access时间不…...
[架构之路-124]-《软考-系统架构设计师》-操作系统-3-操作系统原理 - IO设备、微内核、嵌入式系统
第11章 操作系统第5节 设备管理/文件管理:IO5.1 文件管理5.2 IO设备管理(内存与IO设备之间)数据传输控制是指如何在内存和IO硬件设备之间传输数据,即:设备何时空闲?设备何时完成数据的传输?SPOO…...
【竞赛/TPU】算能TPU编程竞赛总结
如果觉得我的分享有一定帮助,欢迎关注我的微信公众号 “码农的科研笔记”,了解更多我的算法和代码学习总结记录。或者点击链接扫码关注【竞赛/TPU】算能TPU编程竞赛总结 1 基础知识 1.1【Ubuntu】 Ubuntu操作系统中有很多不同的文件夹,每个…...
从IMU到GPS:手把手教你用ESKF实现机器人定位(附代码避坑指南)
从IMU到GPS:手把手教你用ESKF实现机器人定位(附代码避坑指南) 在机器人定位领域,误差状态卡尔曼滤波(Error-State Kalman Filter, ESKF)正逐渐成为处理IMU和GPS数据融合的主流方法。本文将带您深入理解ESK…...
如何在3分钟内实现iOS设备虚拟定位?iFakeLocation实战指南
如何在3分钟内实现iOS设备虚拟定位?iFakeLocation实战指南 【免费下载链接】iFakeLocation Simulate locations on iOS devices on Windows, Mac and Ubuntu. 项目地址: https://gitcode.com/gh_mirrors/if/iFakeLocation 在iOS应用开发与测试中,…...
AI增强自动化工作流:从规则驱动到意图驱动的智能决策实践
1. 项目概述:当AI遇见自动化工作流最近在GitHub上看到一个挺有意思的项目,叫“NitroRCr/AIaW”。光看名字,可能有点摸不着头脑,但点进去研究一下,你会发现它其实是一个将人工智能(AI)与自动化工…...
GOAT-PEFT:模块化PEFT工具箱,让大模型微调像搭积木一样简单
1. 项目概述:当大模型遇上“轻量级”微调如果你最近在关注大语言模型(LLM)的应用落地,尤其是想在有限的算力资源下,让一个像Llama、ChatGLM这样的“庞然大物”学会你的专属知识或特定任务,那么“微调”这个…...
CocoaPods终极版本管理指南:掌握语义化版本控制与依赖锁定策略
CocoaPods终极版本管理指南:掌握语义化版本控制与依赖锁定策略 【免费下载链接】CocoaPods The Cocoa Dependency Manager. 项目地址: https://gitcode.com/gh_mirrors/co/CocoaPods CocoaPods是iOS和macOS开发中最受欢迎的依赖管理器,它通过智能…...
Kubernetes网络沙箱BotBox:为AI Agent提供零改造的密钥安全与访问控制
1. 项目概述:为AI Agent打造坚不可摧的网络沙箱如果你正在Kubernetes里跑AI Agent,比如让Clawbot、Moltbot或者OpenClaw这类自主代码生成工具去联网干活,心里是不是总有点不踏实?我猜你肯定担心过这几个问题:我给的API…...
语言启蒙到底要不要背单词
语言启蒙阶段到底要不要背单词?我更愿意把这个问题换一种问法:这些词是不是能和声音、图像、语境连起来,并且隔几天还能回来一次。 如果只是拿一张词表硬记,入门用户很容易觉得枯燥。可如果完全不接触词汇,后面的听读…...
清华系团队造出能“边听边说、边看边想“的AI耳朵MiniCPM-o 4.5
这项由清华大学自然语言处理实验室(THUNLP)主导、OpenBMB开源社区联合推出的研究成果,于2026年4月30日以预印本形式发布在arXiv平台,编号为arXiv:2604.27393。感兴趣的读者可通过这个编号检索到完整论文。**一场关于"耳朵和嘴…...
移动网络安全盲区:Windows PC成恶意软件主要源头与防御策略
1. 一个被忽视的真相:移动网络中的“隐形杀手”如果你和我一样,长期关注网络安全,尤其是移动安全领域,那你可能已经习惯了各种关于安卓恶意软件激增、iOS漏洞被利用的警报。媒体头条也总是被“史上最危险手机病毒”这样的标题占据…...
【东亚美学AI化里程碑】:全球首份Midjourney Sumi-e风格Prompt工程白皮书(附东京艺术大学合作验证的17组对比测试数据)
更多请点击: https://intelliparadigm.com 第一章:东亚美学AI化的范式跃迁 东亚美学传统强调“留白”“气韵”“物哀”与“间”(ma)等非显性结构,其核心并非形式完备性,而在于感知张力与意义生成的临界状态…...
