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

【AcWing 835题解】滑动窗口

AcWing 835. Trie字符串统计
【题目描述】
在这里插入图片描述
在查看解析之前,先给自己一点时间思考哦!
天津之眼
【题解】
可以使用Trie 树来解决这个问题,Trie树可以高效地支持字符串的插入和查询操作。

Trie树的基本概念:
Trie树是一种树形结构,用来存储字符串,其中每个节点表示一个字符。
每条从根节点到叶子节点的路径表示一个字符串。
每个节点的cnt数组用于记录该节点对应的字符串出现的次数。

插入操作:遍历字符串的每个字符,通过Trie树构建路径。如果路径不存在,就创建新的节点。最终在路径的末尾节点上增加出现次数。
查询操作:根据字符串的每个字符,沿着树路径向下查找。如果路径存在,则返回末尾节点的cnt值;如果路径不存在,说明该字符串没有插入过,返回0
【参考代码】

#include <iostream>using namespace std;const int N = 100010;  // 最大节点数// son[i][j] 表示节点 i 的第 j 个子节点
int son[N][26], cnt[N], idx;  // son 数组、节点计数、当前索引
char str[N];  // 存储字符串// 插入字符串到 Trie 树
void insert(char *str) {int p = 0;  // 从根节点开始for (int i = 0; str[i]; i++) {  // 遍历字符串的每个字符int u = str[i] - 'a';  // 将字符转换为 0-25 的数字,表示字母 a-zif (!son[p][u]) son[p][u] = ++idx;  // 如果当前节点没有这个子节点,创建新节点p = son[p][u];  // 移动到子节点}cnt[p]++;  // 最后一个字符的节点增加出现次数
}// 查询字符串在 Trie 树中出现的次数
int query(char *str) {int p = 0;  // 从根节点开始for (int i = 0; str[i]; i++) {  // 遍历字符串的每个字符int u = str[i] - 'a';  // 将字符转换为 0-25 的数字if (!son[p][u]) return 0;  // 如果找不到当前字符的子节点,返回 0p = son[p][u];  // 移动到子节点}return cnt[p];  // 返回字符串的出现次数
}int main() {int n;scanf("%d", &n);  while (n--) {char op[2];  scanf("%s%s", op, str); if (*op == 'I') insert(str);  else printf("%d\n", query(str)); }return 0;
}
http://www.dtcms.com/a/299477.html

相关文章:

  • 数据结构 双向链表
  • greenhills编译出错问题
  • C++学习之深入学习模板(进阶)
  • SAPUI5 树形表格TreeTable示例
  • Spring AI(14)——文本分块优化
  • java之23种设计模式
  • 设计模式:Memento 模式详解
  • 简单实现支付密码的页面及输入效果
  • 面条式代码(Spaghetti Code)
  • Java高级之基于Java Attach与Byte-Buddy实现SQL语句增强
  • JWT安全机制与最佳实践详解
  • Linux 系统调用详解:操作文件的常用系统调用
  • Vulnhub jangow-01-1.0.1靶机渗透攻略详解
  • 自定义定时任务功能详解
  • MySQL 表的约束
  • 【面板数据】中国A股上市公司制造业智能制造数据集(1992-2024年)
  • 基于图神经网络的星间路由与计算卸载强化学习算法设计与实现
  • java实现一个方法,isTure则程序继续往下,为false则return的链式写法
  • 零基础学习性能测试第三章:jmeter线程组组合
  • LeetCode|Day26|191. 位 1 的个数|Python刷题笔记
  • Java学习|黑马笔记|Day23】网络编程、反射、动态代理
  • AI+预测3D新模型百十个定位预测+胆码预测+去和尾2025年7月26日第150弹
  • 在Power Automate Desktop中执行PowerShell获取SharePoint online某个文件夹的用户权限列表
  • SAP ABAP的数据通过调用泛微Restful API同步数据到OA建模表
  • 学习日志19 python
  • pytest中的rerunfailures的插件(失败重试)
  • 在 Scintilla 中为 Squirrel 语言设置语法解析器的方法
  • 【Kubernetes】使用StatefulSet进行的资源调度,扩缩容,更改配置到版本回滚,三种配置更新方式
  • c#中让图片显示清晰
  • 三、平衡桥电路