shift and/or 算法

https://blog.csdn.net/silence401/article/details/77446537

求字符串匹配问题的一种算法,这个大佬写的很详细了

 

这里简单总结一下,个人备忘笔记

 

shift and

令v['a'-'z'][i]=0/1标记模式串的位置i是不是对应字符,是为1,不是为0

然后从目标串的最左边开始一个位置一个位置的看,假设现在到了第x个位置

令tmp[i]表示当前匹配情况,初始全0

若tmp[i]=1,则模式串的前i位前缀 和当前匹配到的第x位的i位后缀 是匹配的

所以若tmp的最后一位是1,表示出现了一个完全匹配

每次怎么更新呢?

用bitset来表示这些0/1

tmp=(tmp<<1|1)&v[c]  c表示目标串的x位置的字符

 

shift or

和上面相反

令v['a'-'z'][i]=0/1标记模式串的位置i是不是对应字符,是为0,不是为1

令tmp[i]表示当前匹配情况,初始全1

所以若tmp的最后一位是0,表示出现了一个完全匹配

tmp=tmp<<1 | v[c]  

posted @ 2021-08-11 15:11  TRTTG  阅读(57)  评论(0编辑  收藏  举报