因為自己是個菜b所以老實點複習演算法
假設兩個字串s1,
s2
s1,s2
s1,s2.
需要找出s2s2
s2在s 1s1
s1**現次數(包含0次).
n ex
ti
next_i
nexti
:在s
21..
is2_
s21..i
中最長公共字首字尾的長度.
(因為我懶得貼圖所以只會口胡)
(貼個不錯的部落格忘記了就看這個)
首先逐位匹配,如果遇到不匹配的,按照平時的匹配規律,我們應該是往後移一位然後重複匹配過程.
但是k mp
kmpkm
p演算法的優越之處就在於,它可以利用nex
tnext
next
陣列效率更高的往後跳轉.
假設當前s
21..
js2_
s21..j
均匹配,跳轉方式為向後跳j−n
ext[
j]
j-next[j]
j−next
[j]位.
原因:前文提到nex
tnext
next
陣列的定義為最長公共字首字尾,所以跳轉j−n
ext[
j]
j-next[j]
j−next
[j]位就確保了前面的nex
t[j]
next[j]
next[j
]位仍然是匹配的,這就加快了匹配效率.
個人認為還是相當好理解.
其實跟上面的匹配過程同理.
設k
kk表示s
21..
ks2_
s21..k
和s2i−
k..i
s2_s2
i−k.
.i相等.
若s 2k
+1
s2_k+1
s2k+1
相等s 2i
+1
s2_i+1
s2i+1
,則k ++
k++k+
+.否則利用nex
tnext
next
陣列的性質,k=n
ext[
k]
k=next[k]
k=next
[k]往前跳直至s2k
+1==
s2i+
1s2_k+1 == s2_i+1
s2k+1
==s2
i+1
.
演算法之字串字元統計
分析和思路 用map建立字元對映,並賦值到pair結構裡,然後用vector的sort 優先順序排序 1 此檔案包含 main 函式。程式執行將在此處開始並結束。2 34 include 5 include 6 include algorithm 7 include 8 include 9 usin...
python基礎之字串
1.單引號字串和轉義引號 在python中,字串是用單引號或者雙引號括起來,在表示字串的時候,單引號和雙引號有什麼區別嗎?事實上並沒有。在某些特殊情況時候,單引號和雙引號是不能換線交換的,比如在乙個字串中包含了雙引號,那麼這個字串就必須用單引號括起來,反之,乙個字串中包含了單引號,那麼這個字串就必須...
python基礎之字串
1.基本字串的操作 所有標準序列的操作 索引,分片,乘法,成員資格判斷,求長度,取最小和最大值 同樣適用,但是記住 字串都是不可變的。2.字串格式化 精簡版 字串的格式化可以使用字串格式化操作符 百分號 來實現。在 的左側放置乙個字串 格式化字串 而右側放置希望被格式化的值。可以使用乙個值,如乙個字...