Shift And
一种暴力字符串匹配算法,用bitset优化。复杂度\(O(N*M/w)\)
用\(p\)记录当前匹配第几位是成立的,\(skip\)记录字符是\(c\)的有哪些位置。匹配时,\(p\)中第\(k\)位置是成立的,且下一位正好是\(skip\)对应的字符。那么下一位成立。
bitset<MAXN>skip[26], p;
for (int i = 1; i <= m; ++i)
skip[B[i] - 'a'][i] = 1;
for (int i = 1; i <= n; ++i) {
p <<= 1;
p[1] = 1;
p &= skip[A[i] - 'a'];
if (p.test(m))
printf("%d\n", i - m + 1);
}
Shift-Or 与Shift-And 的唯一区别在于,在Shift-Or 中,“有效位” 是通过0(而不是1)来标识。
标签:字符,匹配,Shift,skip,成立,例题 From: https://www.cnblogs.com/Qing17/p/18316871