字串匹配之KMP演算法

2021-09-28 19:28:40 字數 1852 閱讀 7637

#include

#define maxsize 100

typedef

struct

sqstring;

void

strassign

(sqstring &s,

char cstr)

//初始化串

s.length=i;

}void

destroystr

(sqstring &s)

//釋放串

void

strcopy

(sqstring &s,sqstring t)

//串copy

s.length=t.length;

}bool strequal

(sqstring s,sqstring t)

//判斷串是否相等

else

for(i=

0;ireturn same;

}int

strlength

(sqstring s)

//串的長度

sqstring concat

(sqstring s,sqstring t)

//串的連線

for(i=

0;i)//copy到str

return str;

}sqstring substr

(sqstring s,

int i,

int j)

//求子串

//引數不正確時返回null

for(k=i-

1;k1;k++

)//複製str

str.length=j;

return str;

} sqstring insstr

(sqstring s1,

int i,sqstring s2)

//插入子串

sqstring delstr

(sqstring s,

int i,

int j)

//delete

for(k=

0;k1;k++

)//複製str

for(k=i+j-

1;k)//複製str

str.length=s.length-j;

return str;

}sqstring repstr

(sqstring s,

int i,

int j,sqstring t)

//子串替換

for(k=

0;k)for

(k=i+j-

1;k) str.length=s.length-j+t.length;

return str;

}void

dispstr

(sqstring s)

//輸出串

printf

("\n");

}}void

getnext

(sqstring t,

int next)

//由模式串t求出next值

else}}

intkmpindex

(sqstring s,sqstring t)

//kmp演算法

else j=next[j]

;//i不變,j後退}if

(j>=t.length)

return

(i-t.length)

;//返回匹配模式串的首字元下標

else

return(-

1);//返回不匹配標誌

}int

main()

字串匹配之KMP演算法

以前零零散散做了些kmp的題目,一直也沒找出時間整理,這一段又開始研究字串了,就順便把kmp整理了一下。廢話不說了,我們直接入題。說到kmp,首先應該知道,它是一種字串查詢演算法,因為是由乙個姓k,乙個姓m和乙個姓p的人聯合發表的,所以就叫kmp演算法了。kmp演算法是一種線性時間的的字串匹配演算法...

演算法 字串匹配之KMP

說人話就是 比如有乙個字串 bbc abcdab abcdabcdabde 我想知道,裡面是否包含另乙個字串 abcdabd 許多演算法可以完成這個任務,kmp演算法是最常用的之一。首先對於上面的 比如 我們首先要針對搜尋詞 abcdabd 算出一張 部分匹配表 接下來就很簡單了,將字串和搜尋詞都從...

字串匹配之KMP演算法

問題定義 字串匹配即是在所有文字t中,找出模式p的所有出現。字串匹配常用的演算法有 樸素演算法 rabin karp演算法 有限自動機演算法 kmp演算法 所有演算法中,算kmp演算法效率最高。也較為難理解。作者曾經認真看了3遍嚴蔚敏的 資料結構 遺憾的是沒有看懂,搞得我一度懷疑自己的智商很低。今天...