算法:day1

news2024/11/24 12:03:12

前缀树:

class Trie {
    private Trie[] childrenIndex;// 该节点下一个可能出现的所有字符的链接
    private boolean isEnd;// 该节点是否是最后一个字符
    // 初始化根节点
    public Trie() {
        childrenIndex = new Trie[26];
        isEnd = false;
    }
    
    public void insert(String word) {
        // 获得当前节点指针
        Trie curr = this;
        // 遍历字符
        for (char c : word.toCharArray()){
            // 得到该字符的数组中坐标
            int index = c - 'a';
            // 判断当前节点的下一个节点是否有该字符,如果没有则新建一个节点
            if (curr.childrenIndex[index]==null){
                curr.childrenIndex[index] = new Trie();
            }
            // 移动当前节点指针
            curr = curr.childrenIndex[index];
        }
        curr.isEnd = true;
    }
    
    public boolean search(String word) {
        // 当前指针指向根节点
        Trie curr = this;
        for (char c : word.toCharArray()){
            // 得到当前字符的坐标
            int index = c - 'a';
            // 该字符不在当前指针的下一个节点里
            if (curr.childrenIndex[index]==null){
                return false;
            }else {
                // 在下一个节点里,则移动指针
                curr = curr.childrenIndex[index];
            }
        }
        // 指针移动的时候,指向的节点可能是最后一个,也可能不是
        // 所有应该判断是否是最后一个,同时最后一个节点也不会为null
        if (curr!=null && curr.isEnd){
            return true;
        }
        return false;

    }
    
    public boolean startsWith(String prefix) {
        // 当前指针指向根节点
        Trie curr = this;
        for (char c : prefix.toCharArray()){
            // 得到当前字符的坐标
            int index = c - 'a';
            // 该字符不在当前指针的下一个节点里
            if (curr.childrenIndex[index]==null){
                return false;
            }else {
                // 在下一个节点里,则移动指针
                curr = curr.childrenIndex[index];
            }
        }
        // 指针移动的时候,指向的节点不可能为null
        return curr!=null;
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ArcGIS Desktop使用入门(四)工具箱——属性域

系列文章目录 ArcGIS Desktop使用入门(一)软件初认识 ArcGIS Desktop使用入门(二)常用工具条——标准工具 ArcGIS Desktop使用入门(二)常用工具条——编辑器 ArcGIS Desktop使用入门(二&#x…

从ChatGPT到多模态大模型:现状与未来(多模态)

ChatGPT 训练的核心技术主要包括: 预训练语言模型;有监督微调;基于人类反馈的 强 化 学 习 (ReinforcementLearningfrom Human Feedback,RLHF) 首先,通过自监督预训练使语言模型从大规模语料库中学习语言规律,具备基础 理解和生成能力;然后,通过构造指令微调数据集 并对模型进…

部署GlusterFS群集

目录 一、部署GlusterFS群集 1. 服务器节点分配 2. 服务器环境(所有node节点上操作) 2.1 关闭防火墙 2.2 磁盘分区,并挂载 2.3 修改主机名,配置/etc/hosts文件 3. 安装、启动GlusterFS(所有node节点上操作&…

34. UE5 RPG实现鼠标点击移动

在前面,我们实现过使用键盘按键wasd去实现控制角色的移动,现在,我们实现了InputAction按键触发,后面,实现一下通过鼠标点击地面实现角色移动。 我们将实现两种效果的切换,如果你点击地面快速松开&#xff0…

​如何使用 ArcGIS Pro 制作带贴图建筑

对于用GIS软件制作三维建筑,很多时候都是制作的建筑体块,这里为大家介绍一下怎么使用 ArcGIS Pro 制作带贴图的建筑,希望能对你有所帮助。 数据来源 教程所使用的数据是从水经微图中下载的建筑数据,除了建筑数据,常见…

浏览器工作原理与实践--渲染流水线:CSS如何影响首次加载时的白屏时间

在上一篇文章中我们详细介绍了DOM的生成过程,并结合具体例子分析了JavaScript是如何阻塞DOM生成的。那本文我们就继续深入聊聊渲染流水线中的CSS。因为CSS是页面中非常重要的资源,它决定了页面最终显示出来的效果,并影响着用户对整个网站的第…

大话设计模式——18.策略模式(Strategy Pattern)

简介 是一系列算法的封装,即做的事情相同(方法名称相同)但是实现的方式不同,以相同方式调用所有的算法,减少算法与使用算法的耦合。直接调用方法。 UML图 应用场景 Java AWT中的LayoutManager(布局管理器&…

开源铱塔切换MySQL数据库启动报异常

1.错误日志: 铱塔切换数据库配置为MySQL之后,启动后报错如下: SqlExceptionHelper - Table iotkit.task_info doesnt exist SqlExceptionHelper - Table iotkit.rule_info doesnt exist SqlExceptionHelper - Table iotkit.device_info does…

微软称在量子纠错领域取得大进展,量子超级计算机能在2033年问世?

大数据产业创新服务媒体 ——聚焦数据 改变商业 自从物理学家费曼(Richard Feynman)在80年代首次提出了利用量子力学原理进行计算的概念,无数科学家就梦想着用量子计算重塑未来。可惜现实往往“磕磕绊绊”,40多年过去了&#xff…

Element UI前端页面

1.前端 如何用ElementUI快速搭建一个前端网页模板,接下来会详细讲解! 1.Container布局 这是ElementUI官网提供的能快速搭建一个网页的基本布局模式,以下是一个网页的基本架构模式,主要分为三大块: AsideHeaderMain 我…

SpringBoot快速入门笔记(7)

文章目录 VueRouter前端路由1、简介2、RouterDemo3、子路由4、动态路由 VueRouter前端路由 1、简介 Vue的单页面应用是基于路由和组件的,不同组件的切换需要前端路由完成 vue-router3只能结合vue2,vue-router4只能结合vue3 安装 npm install vue-router…

FreeGPT3.5 开源软件

GPT-3.5不需要付费,也不需要注册用户,可以直接使用了,官方彻底开放了API接口。 该API政策一放开,GitHub很快就已经出现了一个开源项目FreeGPT35,可以自动生成key调用GPT3.5的API接口,再也用不着注册账号和申…

Hololens2远程音视频通话与AR远程空间标注,基于OpenXR+MRTK3+WebRTC实现

Hololens2远程音视频通话与AR远程空间标注 使用Unity2021.3.21版本开发,基于OpenXRMRTK3.0WebRTC实现。 (1)通过视频获取视频帧的矩阵的方法可以参考:https://learn.microsoft.com/zh-cn/windows/mixed-reality/develop/advanced…

强化学习:基础开发

基本就是把看到有用的资料整合在一起了 资料 https://blog.csdn.net/weixin_48878618/article/details/133590646 https://blog.csdn.net/weixin_42769131/article/details/104783188?ops_request_misc%257B%2522request%255Fid%2522%253A%2522166792845916800182132771%25…

【azure笔记 1】容器实例管理python sdk封装

容器实例管理python sdk封装 测试结果 说明 这是根据我的需求写的,所以有些参数是写死的,比如cpu核数和内存,你可以根据你的需要自行修改。前置条件: 当前环境已安装python3.8以上版本和azure cli并且已经登陆到你的账户 依赖安…

Angular 使用DomSanitizer

跨站脚本Cross-site scripting 简称XSS,是代码注入的一种,是一种网站应用程序的安全漏洞攻击。它允许恶意用户将代码注入到网页上,其他用户在使用网页时就会收到影响,这类攻击通常包含了HTML和用户端脚本语言(JS&…

echarts 条形图(柱状图)多个图例按钮默认高亮一个,且只能高亮一个

核心:给图例按钮添加点击事件 myChart.on("legendselectchanged", function (params) {let selected {功率柜: true,母线柜: false,充电桩终端: false,网络柜: false,};for (let key in selected) {if (key ! params.name) {myChart.setOption({legend:…

数据结构之来链表——单链表

什么是单链表: 文字说明: 单链表顾名思义,就是指单项链表,即只有一个方向的链性线性表。 图解: 如下图所示,即为链表(DATA为我们自己所定义的数据类型): 单链表的创建&am…

【jQuery】jQuery框架

目录 1.jQuery基本用法 1.1选择器 1.2jQuery对象 1.3事件绑定 1.4链式编程 1.5过滤方法 1.6样式操纵 1.6属性操纵 1.7操作value 1.8查找方法 1.9类名操纵 1.10事件进阶 1.11触发事件 1.12window事件绑定 2.节点操作与动画 2.1获取位置 2.2滚动距离 2.3显示/隐…

使用阿里云试用Elasticsearch学习:4. 聚合——1

在这之前,本书致力于搜索。 通过搜索,如果我们有一个查询并且希望找到匹配这个查询的文档集,就好比在大海捞针。 通过聚合,我们会得到一个数据的概览。我们需要的是分析和总结全套的数据而不是寻找单个文档: 在大海里…