字串匹配掌握了嗎?

2021-10-23 06:20:59 字數 1112 閱讀 3951

字串匹配,也就是kmp演算法!

這道題的出題人給予我們寬容,所以暴力也是可以解的;

這道題目的標準解法應該是kmp,即時間複雜度為o(n

)o(n)

o(n)

,空間複雜度為o(m

)o(m)

o(m)

#include

"bits/stdc++.h"

using

namespace std;

//設定最長的長度為256

const

int maxn =

1100

;//輸入

char s[maxn]

;char t[maxn]

;//設定dp陣列

int dp[maxn]

[256];

int t;

intmain()

else

} x = dp[x]

[t[j]];

}//注意這裡m也要設定,因為我們要求子串的數量

for(

int c=

0;c<

256;c++

)//下面進行匹配,kmp是不會回頭的

int j=0;

for(

int i=

0;iprintf

("%d\n"

,cnt);}

return0;

}

這裡與傳統的kmp不同的地方就是要記錄匹配子串的數量。例如:

ababa

aba

我們在匹配成功之後,要直接回退到影子狀態x。所以我們進行的是直接賦值,因為最後的那個狀態也沒有啥可以讀入的字元了,處理如下:

for

(int c=

0;c<

256;c++

)

輕鬆掌握KMP演算法 字串匹配

字串匹配是計算機的基本任務之一。舉例來說,有乙個字串 bbc abcdab abcdabcdabde 我想知道,裡面是否包含另乙個字串 abcdabd 許多演算法可以完成這個任務,knuth morris pratt演算法 簡稱kmp 是最常用的之一。它以三個發明者命名,起頭的那個k就是著名科學家d...

字串匹配

題目描述 讀入資料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中保證不出現...