电子字典

这道题目可以使用转换对象法:比如说添加操作,我们不妨将已知字符串删去一个字符(每个已知字符串可以产生20个新字符串),然后再建立trie树,然后让查询字符串在trie树上面找就可以了

也可以直接枚举每个查询字符串编辑距离为1的字符串,然后在trie树上查找

也要学会一种新算法:trie+dfs,具体见洛谷题解,一般在规模较小的时候可以使用

update 2024.7.25

以上做法不TLE我是没想到的,重新做的时候自己重新想了一个

首先对于删除操作暴力就好了没啥问题,剩下两种操作都差不多,以第三种操作为例

首先对所有单词建立trie树A,再将所有单词反过来建立trie树B,然后建立26个虚点表示26个字母,这些虚点用来连接AB;对每一个字符串,设f[i]表示其前缀[1,i]所在A上的节点编号,g[i]表示其后缀[i,l]所在B上的节点编号,于是对于每一位i,枚举中转字母,在f[i1],中转字母,g[i+1]之间连边(或用数组记录),然后就可以快速处理查询了

posted @   最爱丁珰  阅读(33)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示