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