别吵,我在思考
2026-07-23 20:24:35
发布于:广东
Problem:A21317
令模式串为 ,文本串为 ,通配符数量为 。
你谷题解区都是 的,看看能不能去掉一些东西。
首先把最左边的 * 左边和最右边的 * 右边的字符都给匹配了,变成 *...* 的样子。
我们按 * 分段,依次匹配,显然越早匹配越优。
现在就转化成了如何匹配带 ? 的字符串。
如果你直接将 ? 当万能的一起跑 KMP,就会出问题。比如说 hack:
*bab?bab*
1
babbabbbaba
你会发现前 个是没问题的,但是匹配到 的时候,需要跳 next,但是此时 的 ba 和 的 bb 匹配了!
现在如果要判断是否失配,需要将所有原先匹配 ? 的位置全都判一遍,复杂度又带上 。
那咋办,只能考虑复杂度带 的了。


然后我们发现好像可以把 ? 也划分了,然后给每一段匹配。
所以考虑对这个跑一个 ACAM,加上偏移看第一个可以匹配到底的是哪个位置。
然后我们惊喜地发现,这个可以 bitset。
然后就可以 ,去掉 也是去,嗯。字符集算常数,嗯。
代码,会写的,吧。
全部评论 5
别思考,我在吵
2026-07-23 来自 浙江
1羡慕棍母
2026-07-24 来自 广东
0生出 otto 了
2026-07-24 来自 广东
0
能不能出篇讲 bitset 的文章
2026-07-23 来自 广东
0这还要文章吗
2026-07-24 来自 广东
0你就知道如果只有 01 而且转移能用移位(循环移位)、与或异或运算得出结果就能用 bitset
2026-07-24 来自 广东
0所以 bitset 相当于用一个大小上限可以控制的大变量进行二进制计算吗
2026-07-24 来自 广东
0
顶!
2026-07-23 来自 浙江
0d
2026-07-23 来自 广东
0顶!
2026-07-23 来自 浙江
0何意味,还没写完
2026-07-23 来自 广东
0现在,差不多,写完了,虽然说,代码,还没写,
2026-07-23 来自 广东
0先支持!
2026-07-23 来自 浙江
0













有帮助,赞一个