hrbustoj 1551:基础数据结构——字符串2 病毒II(字符串匹配,BM算法练习)

基础数据结构——字符串2 病毒II
Time Limit: 1000 MS Memory Limit: 10240 K
Total Submit: 284(138 users) Total Accepted: 177(135 users) Rating: Special Judge: No
Description
自从计算机病毒的概念被提出之后,病毒的种类可以说是层出不穷。现在,单纯的病毒是逃不过杀毒软件的。因此现在的病毒往往隐藏一些字符之中来达到蒙混过关的目的。已知连续的字符串"bkpstor"是一段病毒编码,请分析给出的一段字符串中是否包含病毒编码。

Input
本题有多组测试数据,对于每组数据输入一个字符串Str(长度不超过100),处理到文件结束。

Output
如果字符串中包含病毒编码,输出Warning并换行,否则输出Safe并换行。

Sample Input
123455676sa

Sample Output
Safe

Author
杨和禹@HRBUST


 

  字符串匹配

  我使用的是BM算法,BM算法是BF算法的优化,是一种亚线性匹配算法。比BF稍快一些。

  代码:

 1 #include <stdio.h>

 2 int BM_index(char t[],char s[])    //返回第一次匹配的位置

 3 {  4     int i,j,lt,ls;  5     for(lt=0;t[lt];lt++);    //计算长度

 6     for(ls=0;s[ls];ls++);  7     //BM匹配

 8     for(i=ls-1;i>=lt-1;i--)  9         if(s[i]==t[lt-1]){ 10             for(j=2;j<=lt;j++) 11                 if(t[lt-j]!=s[i-j+1]) 12                     break; 13             if(j>lt) break; 14  } 15     if(i>=lt-1) return i-lt+1; 16     return -1; 17 } 18 int main() 19 { 20     char t[20]="bkpstor",s[110]; 21     while(scanf("%s",s)!=EOF){ 22         if(BM_index(t,s)==-1) 23             printf("Safe\n"); 24         else 

25             printf("Warning\n"); 26  } 27     return 0; 28 }

 

Freecode : www.cnblogs.com/yym2013

你可能感兴趣的:(数据结构)