第四章字串

2021-10-05 07:52:03 字數 1495 閱讀 1570

樸素的串匹配演算法

評價:簡單易懂,但效率低下。演算法時間複雜度o(m*n)

樸素演算法的執行過程,設目標串 t: ababcabcacbab,模式串 p: abcac 

樸素的串匹配演算法

'''def *****_matching(t,p):

m,n = len(p),len(t)

i,j = 0,0

while i < m and j < n:

if p[i] == t[j]:

i,j = i+1,j+1

else:

i,j = 0,j-i+1

if i == m:

return j-i

return -1

'''時間複雜度: o(m*n)

缺陷:可能出現回溯,匹配中遇到一對字串不同時,模式串p將右移乙個字串位置,隨後的匹配

回到模式串的開始(重置j=0)

'''無回溯串匹配演算法(kmp演算法)解讀:關鍵在於充分利用了模式串中的資訊。

在 pi 匹配失敗時,所有 pk(0 ≤ k< i)都已匹配成功(否則 不會考慮 pi 的匹配)。也就是說: tj 之前的 i-1 個字元就是 p 的前 i-1 個字元 。原本應該根據 t 的情況確定前移方式,但實際上可以根據 p 本身的情況確定,可以通過對模式串本身的分析在匹配之前做好 。

結論:對 p 中的每個 i,有乙個唯一確定的 ki,與被匹配的串無關。通 過對模式串 p 的預分析,可以得到每個 i 對應的 ki 值

#pnext表構造方法

def gen_pnext(p):

'''生成針對p中各位置i的下乙個檢查位置表,用於kmp演算法'''

i, k, m = 0, -1, len(p)

pnext = [-1] * m

while i < m-1:

if k==-1 or p[i]==p[k]:

i, k=i+1,k+1

pnext[i]=k

else:

k=pnext[k]

return pnext

pnext=gen_pnext('abbcabcaabbcaa')

#kmp演算法

def matching_kmp(t,p,pnext):

'''kmp串匹配,主函式'''

OC 第四章 字串

第四章 字串 oc字串 unichar unicode碼 組成 c語言 ascii碼 不可變字串 nsstring 自身的長度以及內容都是不可變的 1.建立字串的五種方式 2.字串的常用方法 nsstring str4 str substringwithrange range 4.字串的拼接 5.判...

第四章 字串和字元

字串是由多個字元構成的序列,比如 hello,world 或者 albatross swift用string型別代表字串,而string又代表乙個character型別的集合。swift的string和character型別提供一種快速的,符合unicode標準的方式來處理 中的文字。字串建立和操作...

第四章 字串與陣列

字串 定義 var list welcome to the westworld 字串長度 list.length 獲得指定位置的字元 list.charat n n是角標 獲取字串首次出現位置 list.indexof n 根據位置提取一段子串 list.slice num1,num2 字串分割成陣...