資料結構 串

2021-09-06 01:45:58 字數 1965 閱讀 6268

2 串的表示和實現

3 串的模式匹配演算法

3.2 模式匹配的一種改進演算法(kmp演算法)

4 串操作應用舉例

串(string)(或字串)是由零個或多個字元組成的有限序列,一般記為

s =′

a1a2

⋯an′

(n≥0

)s = 'a_1 a_2 \cdots a_n ' (n \ge 0)

s=′a1​

a2​⋯

an′​

(n≥0

)其中,s是串的名,用單引號括起來的字串行是串的值

a i(

1≤i≤

n)

a_i(1 \le i \le n)

ai​(1≤

i≤n)

可以是字母、數字或其他字元

串中字元的數目n

nn稱為串的長度

零個字元的串稱為空串(null string),它的長度為零。

串中任意個連續字元組成的子串行稱為該串的子串。

包含子串的串相應地稱為主串。

通常稱字元在序列中的序號為在串中的位置。

子串在主串中的位置則以子串的第乙個字元在主串中的位置來表示

稱兩個串是相等的,當且僅當這兩個串的值相等。

也就是說,只有當兩個串的長度相等,並且各個對應位置的字元都相等時才相等。

用一組位址連續的儲存單元儲存串值的字串行

仍以一組位址連續的儲存單元儲存串值的字串行,但它們的儲存空間是在程式執行過程中動態分配而得。

存 儲密

度=串值

所佔的存

儲位實際

分配的存

儲位

儲存密度 = \frac

儲存密度=實

際分配的

儲存位串

值所佔的

儲存位​

子串的定位操作通常稱作串的模式匹配(其中t稱為模式串)

3.1.2.1 演算法描述

將主串的第pos個字元和模式的第乙個字元比較,

直到主串的乙個連續子串字串行與模式相等 。返回值為s中與t匹配的子串行第乙個字元的序號,即匹配成功。

否則,匹配失敗,返回值 0

3.1.2.2 時間複雜度

若n為主串長度,m為子串長度,最壞情況是

主串前面n-m個位置都部分匹配到子串的最後一位,即這n-m位各比較了m次

最後m位也各比較了1次

總次數為:(n−

m)∗m

+m=(

n−m+

1)∗m

(n-m)*m+m=(n-m+1)*m

(n−m)∗

m+m=

(n−m

+1)∗

m 若m

<

<

nm<

m<

<

n,則演算法複雜度o(n

∗m

)o(n*m)

o(n∗m)

此演算法可以在o(n

+m

)o(n + m)

o(n+m)

的時間數量級上完成串的模式匹配操作。

每當一趟匹配過程中出現字串比較不等時,不需回溯i指標

而是利用已經得到的「部分匹配」的結果,將模式串向右「滑動」盡可能遠的一段距離後,繼續進行比較

const

int maxn =

1e6+10;

int nxt[maxn]

;char s1[maxn]

, s2[maxn]

;int len1, len2;

void

get_next()

else

j = nxt[j];}

return;}

void

kmp(

)else

j = nxt[j];if

(j == len2)

}}

資料結構 串

輸入乙個字串,按字典序列印出該字串中字元的所有排列。例如輸入字串abc,則列印出由字元a,b,c所能排列出來的所有字串abc,acb,bac,bca,cab和cba。結果請按字母順序輸出。我們求整個字串的排列,可以看成兩步 首先求所有可能出現在第乙個位置的字元,即把第乙個字元和後面所有的字元交換。第...

資料結構 串

串名 串值 串長 空串 空格串。字串的比較 字串模式匹配演算法 1.簡單字串模式匹配演算法 最簡單實現是用字串p的字元依次與字串t中的字元進行比較。實現思想是,首先將子串p從第0個字元起與主串t的第pos個字元起依次比較對應字元,如全部對應相等,則表明已找到匹配,成功終止。否則將子串p從第0個子串起...

資料結構 串

串 又稱字串 是一種特殊的線性表,它的每個結點僅由乙個字元組成。在早期的程式語言中,串僅在輸入或輸出中以直接量的形式出現,並不參與運算。隨著計算機的發展,串在文字編輯 詞法掃瞄 符號處理以及定理證明等許多領域得到越來越廣泛的應用。在高階語言中開始引入了串變數的概念,如同整型 實型變數一樣,串變數也可...