kmp雙指標
1,理解陣列的 基本概念 及其 操作方式;
2,理解 二維陣列 的基本概念,熟悉二維陣列的使用;
3,了解 字串 的概念以及字串所具有的不同特性;
4,理解字串匹配中的 kmp 演算法;
5,能夠運用 雙指標 解決實際問題。
集合是爺爺,列表是爸爸,字串是兒子
陣列的查詢
按位置查詢:時間複雜度:o(1)。索引+偏移量(下標)
按值查詢:時間複雜度:o(n)。計算機不知道個位置處的值資訊,需要一一查詢判斷。
新增元素
時間複雜度:o(n)
刪除元素
時間複雜度:o(n)
只考慮最壞情況的時間複雜度
kmp主要演算法**
int match
(char*
p, char*s)
// 則轉到下一字元
else
j = next[j]
;// 模式串右移(注意:文字串不用回退)
delete
next;
// 釋放 next 表
return i - j;
}
構造 next 表參考**int*
buildnext
(char*p)
else
// 失配
t =n[t]
;returnn;
}
情景一
解決從兩端向中間迭代陣列
例:反轉陣列中的元素。比如陣列為 [『l』, 『e』, 『e』, 『t』, 『c』, 『o』, 『d』, 『e』],反轉之後變為 [『e』, 『d』, 『o』, 『c』, 『t』, 『e』, 『e』, 『l』]。
**展示:
def reversestring
(self, s)
: i, j =0,
len(s)-1
while i < j:
s[i]
, s[j]
= s[j]
, s[i]
i +=
1 j -=
1
思想:使用雙指標技巧,其思想是分別將兩個指標分別指向陣列的開頭及末尾,然後將其指向的元素進行交換,再將指標向中間移動一步,繼續交換,直到這兩個指標相遇。
情景二解決同時有乙個慢指標和乙個快指標。
例:給你乙個陣列 nums 和乙個值 val,你需要 原地 移除所有數值等於 val 的元素,並返回移除後陣列的新長度。
**展示:
def removeelement
(self, nums: list[int]
, val: int)
-> int:
slow =
0 n =
len(nums)
for fast in
range
(n):
if nums[fast]
!= val:
nums[slow]
= nums[fast]
slow +=
1return slow
思想:確定兩個指標的移動策略。 資料結構基礎訓練 陣列與字串
學習心得 1.陣列 陣列與列表最大的不同點是列表中沒有索引,其次陣列中的元素在記憶體中是連續儲存的,且每個元素占用相同大小的記憶體 對於陣列,計算機會在記憶體中為其申請一段連續的空間,並且會記下索引為 0 處的記憶體位址 2.字串的基本操作物件通常是字串整體或者其子串 是否可以使用 比較兩個字串取決...
資料結構基礎訓練陣列與字串
給定乙個排序陣列和乙個目標值,在陣列中找到目標值,並返回其索引。如果目標值不存在於陣列中,返回它將會被按順序插入的位置。你可以假設陣列中無重複元素。示例 1 輸入 1,3,5,6 5 輸出 2 示例 2 輸入 1,3,5,6 2 輸出 1 int searchinsert int nums,int ...
資料結構基礎訓練
1.陣列簡介 2.二維陣列簡介 3.字串簡介 1尋找陣列的中心索引 2旋轉矩陣 3最長公共字首 1.尋找陣列的中心索引 給你乙個整數陣列 nums,請編寫乙個能夠返回陣列 中心下標 的方法。陣列 中心下標 是陣列的乙個下標,其左側所有元素相加的和等於右側所有元素相加的和。如果陣列不存在中心下標,返回...