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

lc1032-字符流

题目描述

  • 设计一个算法:接收一个字符流,并检查每个新字符加进来形成的新串,其后缀是否是字符串数组 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.hskmm.com/?act=detail&tid=10028

相关文章:

  • C++小白修仙记_LeetCode刷题_哈希表
  • 【F#学习】字符串String
  • 现代汽车前瞻杯2025牛客暑期多校训练营3
  • 实用指南:多技术融合提升环境生态水文、土地土壤、农业大气等领域的数据分析与项目科研水平
  • 【F#学习】“变量”?绑定!
  • 2023 CCPC 深圳 F
  • 完整教程:【算法】双指针(三)[快慢指针]-快乐数
  • 9.19做题资料:哈希表查找时间复杂度分析
  • CF2143F Increasing Xor
  • 提到链接,你能想到什么
  • 实用指南:容器逃逸漏洞
  • 三种方式处理SpringBoot全局异常
  • ECT-OS-JiuHuaShan 框架的元推理,是历史性的文明话语权
  • 应对连写与变体:深度学习赋能维吾尔文识别的核心方案与难点解析
  • CMake工具链
  • 20250918 - NGP Token 攻击事件:价格维持机制为攻击者做了嫁衣
  • 【脑电分析系列】第6篇:经典ERP成分解析 — P300、N170、N400等波形与它们代表的认知功能 — 洞察大脑的认知“电信号语言” - 教程
  • 9.19
  • [GDKOI2023 提高组] 游戏 题解
  • CSP-J/S 2025 游记
  • 2025.9.19 计数dp小记
  • Odoo19.0发布、微信支付、支付宝支付和顺丰模块同步上线
  • 9月14-21日小记 - L
  • ctfshow web入门 命令执行
  • 解题记录说是 | P3695 CYaRon!语
  • 分享一个极度精简的绿色的 五笔输入法
  • 实用指南:AI推理范式:从CoT到ReAct再到ToT的进化之路
  • sign up - Gon
  • ctfshow web入门 信息搜集
  • 完整教程:数据结构:单链表的应用(力扣算法题)第二章