Shift and 算法 模板记录

来源:互联网 发布:豆沙色唇膏 知乎 编辑:程序博客网 时间:2024/05/31 19:46

今天补了2016大连赛区的一个题目,关于shift and算法的问题,所以去学了shift and算法,具体的原理不是非常清楚,先记录个模板在这里,应该有用,复杂度是O(n)。

//shift andint shift_and(char *s1, int len1, char *s2, int len2){ //s1是文本,s2是模式串,功能是返回模式串在文本串中出现的第一个位置    int B[128];    memset(B, 0, sizeof(B));    for(int i = 0; i < len2; i++) B[s2[i]] |= 1<<i;    int D = 0;    for(int i = 0; i < len1; i++){        D = ((D<<1)|1) & B[s1[i]];        if(D & (1<<(len2-1)))            return i-len2+1;    }    return -1;}
0 0