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

算法题(195):点名

审题:

本题需要我们判断字符串的查询状态,并根据不同查询状态输出不同的结果

思路:
方法一:字典树

本题可以先将所有字符串存储到某一种数据结构中,然后此数据结构可以完成字符串次数与字符串本身的关系绑定(key—value类型),我们查看字符串出现次数

(1)初次查询:为1输出OK,然后将次数改为-1

(2)没有该字符串:为0输出WRONG

(3)重复查询:为-1就输出REPEAT

解题:
 

#include<iostream>
using namespace std;
const int N = 5e5 + 10;
int e[N], tr[N][26];
int n, m;
int idx;
void insert(string& s)
{int cur = 0;for (auto ch : s){int path = ch - 'a';if (tr[cur][path] == 0) tr[cur][path] = ++idx;cur = tr[cur][path];}e[idx]++;
}
void inquire(string& s)
{int cur = 0;for (auto ch : s){int path = ch - 'a';if (tr[cur][path] == 0){cout << "WRONG" << endl;return;}cur = tr[cur][path];}if (e[cur] == 1)//初次点名{e[cur] = -1;cout << "OK" << endl;}else if(e[cur] == -1)//重复点名{cout << "REPEAT" << endl;}else//无此名字{cout << "WRONG" << endl;}
}
int main()
{//数据插入字典树cin >> n;for (int i = 1; i <= n; i++){string s; cin >> s;insert(s);}//数据查询与结果输出cin >> m;for (int i = 1; i <= m; i++){string s; cin >> s;inquire(s);}return 0;
}

(1)tr数组中N的取值:tr数组行变量的个数是总字符个数决定的

总字符个数 = 字符串个数 * 单字符串的最大字符数 = 1e4 * 50 = 5e5

(2)本题不需要判断字符串前缀,只需要记录字典树中哪个节点是字符串的终点,所以我们只需要用end数组即可

(3)出现WRONG的情况有两种:

其一是在进行查询中间就发现没有该字符串

其二是查询字符串是存储的字符串的前缀,此时for循环可以正常结束,但是该字符串其实是不存在的,需要特殊判断


样例如下

1

ab

1

a

由于a是ab的前缀,所以for循环可以正常结束,而此时三种情况都可能出现,所以我们要用

if——else if ——else的语句块进行判断。

P2580 于是他错误的点名开始了 - 洛谷

http://www.dtcms.com/a/358671.html

相关文章:

  • 【学Python自动化】 2. Windows Python 解释器使用笔记
  • 【shell】Shell脚本中的if判断条件和文件测试操作符
  • “人工智能+”政策驱动下的技术重构、商业变革与实践路径研究 ——基于国务院《关于深入实施“人工智能+”行动的意见》的深度解读
  • STM32的内存分配与堆栈
  • Redis 测试:过期 key 内存释放情况
  • JVM架构图是怎样的?
  • 算法(④KMP)
  • SpringAI应用开发工程师高阶面试剧本与知识点全解析(含RAG、多租户、流式推理、企业落地场景)
  • Python3 lambda(匿名函数)
  • HBase高效并发锁:IdLock极简内存设计
  • Qt QML注册全局对象并调用其函数和属性
  • 银河麒麟Kylin系统编译安装Qt5.12.12
  • Yolov8损失函数:回顾Yolov8-Loss
  • ​导游|基于SprinBoot+vue的在线预约导游系统
  • DrissionPage 实战:高效爬取网页数据并保存为 CSV 的全流程解析
  • (链表)Leetcode206链表反转+Leetcode6删除链表的倒数第N个结点+虚拟头节点使用
  • Linux 笔记 Day01|课程结构
  • 第三弹、AI、LLM大模型是什么?
  • 深度学习重塑医疗:四大创新应用开启健康新纪元
  • MySQL-事务(上)
  • 【Linux】如何使用 Xshell 登录 Linux 操作系统
  • Linux 下 Docker 容器部署指南(Java + Redis 示例)
  • ⭐CVPR2025 自动驾驶半监督 LiDAR 分割新范式:HiLoTs 框架深度解析
  • 设置word引用zotero中的参考文献的格式为中文引用格式或中英文格式
  • Shell编程核心入门:参数传递、运算符与流程控制全解析
  • SEO关键词布局总踩坑?用腾讯云AI工具从核心词到长尾词一键生成(附青少年英语培训实操案例)
  • [吾爱原创] 千千每日计划
  • Java全栈工程师面试实录:从基础到微服务的全面技术解析
  • 系统架构设计师选择题精讲与解题技巧
  • Spring Boot 自动配置原理深度解析:从启动流程到监听机制