串是由零個或多個字符組成的有限序列,又名叫字符串。
串中的字符數目n稱為串的長度,
零個字符的串稱為空串,可以直接用“”表示,也可以用希臘字母 Φ。
-
串的比較
圖片.png
-
串的抽象數據類型
圖片.png
-
串的存儲結構
- 串的順序存儲結構
串的順序存儲結構是用一組地址連續的存儲單元來存儲串中的字符序列。
這樣會導致很多截斷,是存儲的空間不足的原因
于是對于串的順序存儲,串值的存儲空間可在程序執行過程中分配而得,比如在計算機中存放一個自由存儲區,叫做“堆”。這個堆可由c語言的動態分配函數malloc()和free()來管理。 - 串的鏈式存儲結構
對于串的鏈式存儲結構,與線性表是相似的,但由于串結構的特殊性。結構中的每個元素數據是一個字符,如果也簡單的應用鏈表存儲串值,一個結點對應一個字符,就會存在很大的空間浪費。因此一個結點可以存放多個字符,最后一個結點若是未被占滿時,可以用“#”或其他非串值字符補全。
- 串的順序存儲結構
圖片.png
具體幾個字符合適,看情況
但是除了連接串和串操作時一些方便外,總個來說不如順序存儲靈活,性能也比不上。
-
樸素的模式匹配算法
- 字串在串中的定位操作通常被稱為串的模式匹配。
依次進行,匹配到為止,時間復雜度是O(n+m),最復雜的情況是O(n-m+1)*m。
-
KMP模式匹配算法
- KMP模式算法的原理
其實就是靠一些數學個規律,使算法不用按主串與字串的順序一個個匹配,這樣字串會一直重復匹配一些類似的東西,引入next數組值,可以通過回溯j的一些規律來減少字串的匹配重復。
- KMP模式算法的原理
- next數組值推導
- KMP模式匹配算法實現
- KMP模式匹配算法改進