当前位置: 首页 > 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.rkmt.cn/news/8300.html

相关文章:

  • 八股整理xdsm - 教程
  • US$98 Yanhua Mini ACDP Module4 BMW 35080, 35160DO WT EEPROM Read Write
  • US$98 Yanhua Mini ACDP Module4 BMW 35080, 35160DO WT EEPROM Read Write
  • 深入解析:K8s学习笔记(二) Pod入门与实战
  • 【F#学习】“变量”?绑定!
  • 实用指南:容器逃逸漏洞
  • 深入解析:卷对卷(Roll-to-Roll,R2R)技术的应用领域和技术进展
  • 分享一个极度精简的绿色的 五笔输入法
  • CSP-J/S 2025 游记
  • 完整教程:数据结构:单链表的应用(力扣算法题)第二章
  • CF2039E Shohag Loves Inversions
  • 深入解析:sqlite3的加解密全过程
  • U522155 板垣 カノエ is WATCHING YOU std
  • ctfshow web
  • 代码随想录算法训练营第三天 | leetcode 203 707 206
  • 【F#学习】数组:Array
  • ctfshow 菜狗杯
  • 详细介绍:测试用例详解
  • conda 无法安装依赖 CondaHTTPError: HTTP 000 CONNECTION FAILED for url: tsinghua tencentaliyun
  • vulnhub(持续更新)
  • 小爱同学连接电脑进行交互 教程
  • 已完成今日求所有满足长为 $a$ 的和为 $b$ 的按位或为 $c$ 的非负整数序列的异或和的异或和大学习
  • 集群无法启动CRS-4124: Oracle High Availability Services startup failed - 指南
  • Hello Yqc!
  • SAPO去中心化训练:多节点协作让LLM训练效率提升94%
  • 区间问题
  • 解决 Ubuntu 25.04 下 make menuconfig 报 ncurses 错误的问题 - 指南
  • web359
  • 如何在后端优雅地生成并传递动态错误提示?
  • web358