电子字典1

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

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

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

update 2024.7.25

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

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

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

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值