//此**的nextval陣列以0開頭
//需要在工程下建立「病毒感染檢測輸入資料.txt」檔案
#include
#include
#include
using namespace std;
typedef structhstring;
int* getnextval(const char *s, int len)
void virus_detection()
{ int num,m,flag,i,j; char vir[600];
hstring virus,person,temp;
ifstream infile("病毒感染檢測輸入資料.txt");
ofstream outfile("病毒感染檢測輸出結果.txt");
infile>>num;//讀取待檢測的任務數
while(num--) //依次檢測每對病毒dna和人的dna是否匹配
{infile>>virus.ch+1;//讀取病毒dna序列
infile>>person.ch+1;//讀取人的dna序列
strcpy(vir,virus.ch);
virus.len=strlen(virus.ch)-1;
person.len=strlen(person.ch)-1;
flag=0;//用來標識是否匹配,初始為0,匹配後為非0
m=virus.len;
for(i=m+1,j=1;j<=m;j++) virus.ch[i++]=virus.ch[j];
//因病毒為環狀,故將病毒的長度擴大2倍
//即可線性取到所有長度為virus.len的字串
virus.ch[2*m+1]='\0'; //新增結束符號
for(i=0;i/*
病毒感染檢測輸入資料.txt
3
baa bbaabbba
baa aaabbbba
aabb abceaabb
*/
資料結構 KMP
今天下午實現了kmp演算法 這個演算法算是奇妙,本機器看了10遍左右才基本理解 演算法的核心就是求出next,再依次根據next跳轉,這樣就能線性地匹配出字串 這裡推薦一篇博文說得很好,深入淺出,只是在next陣列是從1開始的,而pattern是從0起始,這也算是前幾次學習的時候沒有理解的地方 今天...
資料結構實驗之串三 KMP應用
time limit 1000ms memory limit 65536k 有疑問?點這裡 有n個小朋友,每個小朋友手裡有一些糖塊,現在這些小朋友排成一排,編號是由1到n。現在給出m個數,能不能唯一的確定一對值l和r l r 使得這m個數剛好是第l個小朋友到第r個小朋友手裡的糖塊數?首先輸入乙個整數...
資料結構實驗之串三 KMP應用
time limit 1000ms memory limit 65536k 有n個小朋友,每個小朋友手裡有一些糖塊,現在這些小朋友排成一排,編號是由1到n。現在給出m個數,能不能唯一的確定一對值l和r l r 使得這m個數剛好是第l個小朋友到第r個小朋友手裡的糖塊數?首先輸入乙個整數n,代表有n個小...