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
");
24         else 
25             printf("Warning
");
26     }
27     return 0;
28 }

Freecode : www.cnblogs.com/yym2013

原文地址:https://www.cnblogs.com/yym2013/p/3692071.html