字符串处理 —— 单模式匹配
生活随笔
收集整理的這篇文章主要介紹了
字符串处理 —— 单模式匹配
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
【問題形式】
- 文本(Text):長度為 n 的數組 T[1..n]
- 模式(Pattern):一個長度為 m 且 m≤n 的數組 P[1..m]
- 有效位移/匹配點(Valid Shift):0≤s≤n-m,且 T[s+1..s+m] = P[1..m],即對 1≤j≤m,有 T[s+j] = P[j],則模式 P 在文本 T 中出現且有效位移為 s,且稱 s 是匹配點
單模式匹配問題,就是給出一個文本以及一個模式,找出文本中所有的匹配點。
例如:在文本 T=abcabaabcabac 中找出模式?P=abaa 的所有出現
如上圖,該模式在此文本中僅出現一次,在位移 s=3 處,即 s=3 是一個匹配點
【算法】
解決字符串匹配的算法有許多,包括:樸素算法(Naive Algorithm)、Rabin-Karp 算法、有限自動機算法(Finite Automation)、 KMP 算法(Knuth-Morris-Pratt Algorithm)等等。
字符串匹配算法通常分為兩個步驟:預處理(Preprocessing)、匹配(Matching),所以算法的總時間復雜度為預處理和匹配的時間復雜度的總和。
常見字符串匹配算法的時間復雜度與時間
- 樸素的字符串匹配算法(Brute Force?Algorithm):點擊這里
- KMP 算法(Knuth-Morris-Pratt Algorithm):點擊這里
【例題】
- Blue Jeans(POJ-3080)(暴力匹配+substr()+find()):點擊這里
- Oulipo(POJ-3461)(統計模式串出現次數,可使用重復字符):點擊這里
- 剪花布條(HDU-2087)(統計模式串出現次數,不能使用重復字符):點擊這里
- Power Strings(POJ-2406)(求循環節個數):點擊這里
- Period(POJ-1961)(求字符串前綴循環節個數):點擊這里
- Seek the Name, Seek the Fame(POJ-2752)(求字符串中前綴后綴中存在循環節的子串長度):點擊這里
- Count the string(HDU-3336)(求字符串前綴匹配數之和):點擊這里
- Period II(FZU-1901)(求字符串前綴中存在循環節的子串個數與長度):點擊這里
- Simpsons’ Hidden Talents(HDU-2594)(KMP求字符串前綴為另一字符串后綴):點擊這里
- Cyclic Nacklace(HDU-3746)(補字符使字符串變為循環串):點擊這里
- Carneginon(2019 ACM-ICPC 徐州賽區網絡賽 D)(KMP):點擊這里
- string matching(HDU-6629)(擴展KMP):點擊這里
總結
以上是生活随笔為你收集整理的字符串处理 —— 单模式匹配的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 图论 —— 二分图
- 下一篇: 图论 —— 环与块 —— 最小环