字串匹配

2022-03-27 03:53:45 字數 778 閱讀 6577

1.樸素演算法(bruteforce)
**:

1

int almostbruteforce(string text, string

pattern) 2

17else

18

21}

2223

if(bequal)

24

27}

2829

return -1

; 30 }

view code

2.kmp演算法:

(1)next[0]= -1 意義:任何串的第乙個字元的模式值規定為-1。

(2)next[j]= -1 意義:模式串t中下標為j的字元,如果與首字元相同,且j的前面的1—k個字元與開頭的1—k個字元不等(或者相等但t[k]==t[j])(1≤k如:t=」abcabcad」 則 next[6]=-1,因t[3]=t[6]

(3)next[j]=k 意義:模式串t中下標為j的字元,如果j的前面k個字元與開頭的k個字元相等,且t[j] != t[k] (1≤k即t[0]t[1]t[2]。。。t[k-1]==t[j-k]t[j-k+1]t[j-k+2]…t[j-1] ,且t[j] != t[k].(1≤k(4) next[j]=0 意義:除(1)(2)(3)的其他情況。

next函式生成**:

1 voidgetnext(constchar*pattern,intnext)

214 }

view code

參考:

字串匹配

題目描述 讀入資料string 然後讀入乙個短字串。要求查詢string 中和短字串的所有匹配,輸出行號 匹配字串。匹配時不區分大小寫,並且可以有乙個用中括號表示的模式匹配。如 aa 123 bb 就是說aa1bb aa2bb aa3bb都算匹配。輸入 輸入有多組資料。每組資料第一行輸入n 1 n ...

字串匹配

time limit 1000ms memory limit 65536k 給定兩個字串string1和string2,判斷string2是否為string1的子串。輸入包含多組資料,每組測試資料報含兩行,第一行代表string1,第二行代表string2,string1和string2中保證不出現...

字串匹配

面試題 給一串很長的字串,要求找到符合要求的字串,例如目的串 123 1 3 2 12 3 這些都要找出來 思路一 利用兩層迴圈,逐個查詢目的串中的字元,比如先查詢字元 1 是否在長字串中,再查詢 2 是否在長字串中,直到目的串遇到 0 是 include include include int m...