字符串的另一种匹配方式

如果我们想对于一个串找在模式串中的出现次数。

我们可以对于每种字符维护出现的位置,这个用 bitset。

然后在查询的时候我们实时维护合法的字符串开头,具体操作是我们可以扫描我们的匹配串,然后每次加入的新元素,用 bitset 平移一定位置把他移到开头区域,然后再进行匹配,这样最后 bitset 的有值的位置就是匹配成功的子串开头。

这个东西如果只匹配一次比 kmp 慢,但这个如果多次询问串的化复杂度就可以除一个 \(W\) 了,另外这个东西也可以简单的进行单点修改,或者是区间覆盖为一个字符都行。

当然如果串的长度 $ \leq 64$ 了,也可以用位运算直接搞。
例题:CF914F,luoguP15867。