字串匹配,也就是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中保證不出現...