#include<iostream>
#include<cstring>
using namespace std;
int table[26];
int horspoolMatch(char str[],char text[]){
int len_str = strlen(str);
int len_text = strlen(text);
for(int i = 0; i < len_str - 1; i ++){
table[str[i] - 'A'] = len_str - i - 1;
}
int p = len_str - 1;
while(p < len_text){
int k = 0;
while(str[len_str - 1 - k] == text[p - k] && k < len_str){
k++;
}
if(k == len_str){
return p - len_str + 1;
}
else p += max(table[text[p] - 'A']-k,1);
}
return -1;
}
int main(){
char str[102000],text[700000];
cin>>str>>text;
cout<<horspoolMatch( str, text)<<endl;
return 0;
}
SWUST oj 572: Boyer–Moore–Horspool algorithm
最新推荐文章于 2024-07-12 10:45:15 发布