lc1032-字符流

news/2025/9/19 22:52:54/文章来源:https://www.cnblogs.com/yuyork/p/19101830

题目描述

  • 设计一个算法:接收一个字符流,并检查每个新字符加进来形成的新串,其后缀是否是字符串数组 words 中的一个字符串

示例

输入:
["StreamChecker", "query", "query", "query", "query", "query", "query", "query", "query", "query", "query", "query", "query"]
[[["cd", "f", "kl"]], ["a"], ["b"], ["c"], ["d"], ["e"], ["f"], ["g"], ["h"], ["i"], ["j"], ["k"], ["l"]]
输出:
[null, false, false, false, true, false, true, false, false, false, false, false, true]解释:
StreamChecker streamChecker = new StreamChecker(["cd", "f", "kl"]);
streamChecker.query("a"); // 返回 False
streamChecker.query("b"); // 返回 False
streamChecker.query("c"); // 返回n False
streamChecker.query("d"); // 返回 True ,因为 'cd' 在 words 中
streamChecker.query("e"); // 返回 False
streamChecker.query("f"); // 返回 True ,因为 'f' 在 words 中
streamChecker.query("g"); // 返回 False
streamChecker.query("h"); // 返回 False
streamChecker.query("i"); // 返回 False
streamChecker.query("j"); // 返回 False
streamChecker.query("k"); // 返回 False
streamChecker.query("l"); // 返回 True ,因为 'kl' 在 words 中

题解

  • 思路:字典树
type StreamChecker struct {root *TrieNodestr  []byte
}type TrieNode struct {son   [26]*TrieNodeisEnd bool
}func Constructor(words []string) StreamChecker {root := &TrieNode{}for _, w := range words {root.insert(w)}return StreamChecker{root: root,str: []byte{},}
}func (t *TrieNode)insert(w string) {for i := len(w) - 1; i >= 0; i -- {idx := w[i] - 'a'if t.son[idx] == nil {t.son[idx] = &TrieNode{}}t = t.son[idx]}t.isEnd = true
}func (this *StreamChecker) Query(letter byte) bool {this.str = append(this.str, letter)node := this.rootfor i := len(this.str) - 1; i >= 0; i -- {idx := this.str[i] - 'a'if node.son[idx] == nil { return false }node = node.son[idx]if node.isEnd { return true }}return false
}

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

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

相关文章

八股整理xdsm - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

C++小白修仙记_LeetCode刷题_哈希表

哈希表(难度:easy) 217. 存在重复元素 给你一个整数数组 nums 。如果任一值在数组中出现 至少两次 ,返回 true ;如果数组中每个元素互不相同,返回 false 。 示例: 输入:nums = [1,2,3,1] 输出:true 解释: 元…

【F#学习】字符串String

字符串 F#的字符串和其他现代化的语言的字符串差异不大。 let fruit = "Apple"字符串可以通过调用其本身的函数来修改,也可以通过String模块下的函数来修改——但字符串是常量,一旦被创建就不可能发生改变…

US$98 Yanhua Mini ACDP Module4 BMW 35080, 35160DO WT EEPROM Read Write

Yanhua Mini ACDP Module 4 BMW 35080, 35160DO WT EEPROM Read & WriteNo need soldering.Function:Read and write BMW M35080, 35160DO WT etc EEPROM Yanhua Mini ACDP Module 4 Package includes:Item No. Ad…

US$98 Yanhua Mini ACDP Module4 BMW 35080, 35160DO WT EEPROM Read Write

Yanhua Mini ACDP Module 4 BMW 35080, 35160DO WT EEPROM Read & WriteNo need soldering.Function:Read and write BMW M35080, 35160DO WT etc EEPROM Yanhua Mini ACDP Module 4 Package includes:Item No. Ad…

深入解析:K8s学习笔记(二) Pod入门与实战

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

现代汽车前瞻杯2025牛客暑期多校训练营3

F Flower 题意简化: 有一朵初始有n片花瓣的花,Yuki会按轮次摘花瓣:每轮操作中,她先摘a片花瓣,之后再摘b片花瓣;若剩余花瓣不足,就把剩下的全部摘完。这个过程会持续到所有花瓣被摘完为止。 Yuki的规则是:当且仅…

详细介绍:[新启航]白光干涉仪在微透镜阵列微观 3D 轮廓测量中的应用解析

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

实用指南:多技术融合提升环境生态水文、土地土壤、农业大气等领域的数据分析与项目科研水平

实用指南:多技术融合提升环境生态水文、土地土壤、农业大气等领域的数据分析与项目科研水平pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !impor…

【F#学习】“变量”?绑定!

绑定 在F#中,给一个值标记上名字的过程叫作绑定(binding)。绑定是不可更改的,就像C#语言中的readonly或者const一样。因此,我们称这样的东西为绑定而非变量。由于F#是静态类型语言,所有的绑定必须在编译期就明确…

2023 CCPC 深圳 F

F. Gift 基环树处理环。 给一棵基环树,要求删掉一条边后还是一棵树,说明只能删掉这棵基环树上的环上的边。 删掉边后还要保证以 \(p\) 作为根节点时,其他节点的儿子数量不超过 \(3\),说明根节点的度数一定是小于等…

完整教程:【算法】双指针(三)[快慢指针]-快乐数

完整教程:【算法】双指针(三)[快慢指针]-快乐数pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", …

9.19做题资料:哈希表查找时间复杂度分析

好的,我用一个简单的比喻来解释,就像你在学校里找座位一样!1. 哈希表是什么? 想象一个教室里有好多桌子(这些桌子就是哈希表)。每张桌子都有一个编号(比如1号桌、2号桌、3号桌……)。老师规定:每个同学必须坐…

CF2143F Increasing Xor

我咋天天忘。还怎么学 OI 啊。 题意 给定长度为 \(n\) 的序列 \(a\),\(q\) 次询问给定 \(l,r\),每次查询提取出 \([l,r]\) 这段子区间,在这段子区间中你能执行任意次操作,每次操作任选 \(l\le i\le j\le r\) 然后 …

提到链接,你能想到什么

linux中的链接文件和虚拟机的克隆技术一.链接文件 在了解链接文件两种类型之前,必须先了解的知识: 文件在Linux中被分成两部分:数据(data block)和文件元数据(inode) inode与block 每个文件都有一个 inode(索引节…

实用指南:容器逃逸漏洞

实用指南:容器逃逸漏洞pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", &qu…

实用指南:容器逃逸漏洞

实用指南:容器逃逸漏洞pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", &qu…

深入解析:卷对卷(Roll-to-Roll,R2R)技术的应用领域和技术进展

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

深入解析:卷对卷(Roll-to-Roll,R2R)技术的应用领域和技术进展

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

三种方式处理SpringBoot全局异常

在SpringBoot开发web项目时,异常处理是必不可少的一部分。在应用中,异常可能出现在任何地方,例如在控制层,服务层,数据访问层等等。如果不对异常进行处理可能会导致应用崩溃或者出现未知的错误。因此对于异常的处…