串是由零個或多個字元組成的有限序列,又名叫字串。即非數值的線性表。
字串在計算機中的大小其實取決於它們挨個字母的前後順序。
空串不含任何字元。
空格串,是只包含空格的串。空格串是有內容有長度的,而且可以不止乙個空格。
子串與主串,串中任意個數的連續字元組成的子串行稱為該串的子串,相應地,包含子串的串稱為主串。子串在主串中的位置就是子串的第乙個字元在主串中的序號。
模式匹配即在主串中定位子串。
基本思想是對主串的每乙個字 符作為子串開頭,與要匹配的字串進行匹配。對主串做大迴圈,每個字元開頭做t的長度的小迴圈,直到匹配成功或全部遍歷完成為止。
思想簡單,但是效率極低。整個演算法的時間複雜度為o((n-m+1)*m)。
基本思想是利用已經得到的部分匹配結果將模式向右滑動盡可能遠一段距離後,繼續進行比較。在整個匹配的過程中,i指標沒有回溯。 j 最大前字尾就是 next[i] 的值。我們把t串各個位置的 j 值的變化定義為乙個陣列 next,那麼 next 的長度就是t串的長度。於是我們可以得到下面的函式定義:
例:
整個演算法的時間複雜度為o(n+m)。
但是kmp還是存在缺陷,因此出現了改進版的kmp演算法,將 next 陣列改為 nextval 陣列。
例:
總結改進過的kmp演算法,它是在計算出 next 值的同時,如果a位字元與它 next 值指向的b位字元相等,則該a位的 nextval 就指向b位的 nextval 值,如果不等,則該a位的 nextval 值就是它自己a位的next的值。
《資料結構與演算法》,熊嶽山著,清華大學出版社,2016,第二版
《2023年資料結構考研複習指導》,電子工業出版社,2020
資料結構 第四章 串
第一章 緒論 第二章 線性表 第三章 棧和佇列 第四章 串 第五章 陣列和廣義表 第六章 樹和二叉樹 第七章 圖 第八章 排序 第九章 查詢 4.2 串的儲存結構 4.2.2 鏈式儲存 4.3 模式匹配 4.4 例題 4.1.1 串的概念 串 string 是零個或多個字元組成的有限序列。一般記作s...
資料結構 第四章 串
1.串是由零到多個字元組成的字串行。2.串的模式匹配演算法 查詢子串 kmp演算法 關鍵是部分匹配值的計算 部分匹配 的實質是,有時候,字串頭部和尾部會有重複。1 熟練使用string.h中提供的串操作函式,理解串的表示和運算的實現。include include using namespace s...
資料結構 第四章
第四章 字串和多維陣列 4.1 字串 4.1.1 字串的定義 1.字串的定義 字串是零個或多個組成的有限序列,只包含空格的串成為空格串。串中所包含的字元個數成為串的長度,長度為0的串為空串,記作 乙個非空串通常該記作 s s1,s2 sn 字串中任意個連續的字元組成的子串行稱為該串的子串,相應地,包...