718 次瀏覽
為了在一個字串中找到最長的迴文子串,我們可以使用 Manacher 演算法。透過選擇每個字元,我們將嘗試使用左右指標查詢是否存在任何迴文。還有一個數組用於儲存資訊,從中我們可以很容易地找到迴文的長度。對於每個字元,陣列將儲存資訊。遍歷整個字串後,我們可以從建立的陣列中找到最長的迴文子序列。該演算法的時間複雜度為 O(n)。輸入和輸出輸入:字串:“levelup” 輸出:最長迴文是:level演算法longestPalindrome(text)輸入 - 用於查詢最長迴文的文字輸出 - ... 閱讀更多
689 次瀏覽
Kasai 演算法用於從字尾陣列中獲取最長公共字首 (LCP) 陣列。首先找到字尾陣列。之後,Kasai 演算法使用字尾陣列列表來查詢 LCP。對於 LCP 陣列,它需要 O(m log n),其中 m 是模式長度,n 是文字長度。Kasai 演算法需要 O(n) 來在主字串中搜索模式。輸入和輸出輸入:主字串:“banana” 輸出:字尾陣列:5 3 1 0 4 2 公共字首陣列:1 3 0 0 2 0演算法buildSuffixArray(text)輸入:主字串輸出:構建的字尾陣列... 閱讀更多
1K+ 次瀏覽
透過構建有限自動機,我們可以簡單地執行文字中的模式搜尋。首先,我們必須填充一個二維陣列以建立有限自動機的轉換表。建立表後,搜尋過程很簡單。從自動機的第一個狀態開始,當我們到達最終狀態時,這意味著在字串中找到了模式。對於有限自動機的構建,時間複雜度為 O(M*K),M 是模式長度,K 是不同字元的數量。主要模式搜尋的複雜度為 O(n)。輸入和輸出輸入:主字串:... 閱讀更多
壞字元啟發式方法是 Boyer Moore 演算法的一種方法。另一種方法是好字尾啟發式。在這種方法中,我們將嘗試找到一個壞字元,這意味著主字串的一個字元與模式不匹配。當發生不匹配時,我們將移動整個模式,直到不匹配變成匹配,否則,模式將移動到壞字元之外。這裡,最佳情況下的時間複雜度為 O(m/n),最壞情況下的時間複雜度為 O(mn),其中 n 是文字長度,m 是模式長度。輸入和... 閱讀更多
424 次瀏覽
字謎基本上是給定字串或模式的所有排列。這種模式搜尋演算法略有不同。在這種情況下,不僅搜尋確切的模式,還搜尋文字中給定模式的所有可能排列。為了解決這個問題,我們將整個文字劃分為多個與模式長度相同的視窗。然後計算每個模式字元並將其儲存在一個數組中。對於每個視窗,我們還嘗試查詢計數陣列,然後檢查它們是否匹配。字謎模式搜尋演算法的時間複雜度為 O(n)。輸入... 閱讀更多
此演算法有助於查詢所有給定關鍵字集的所有出現。它是一種字典匹配演算法。它使用包含所有關鍵字的樹結構。建立樹後,它嘗試將樹轉換為自動機,以便線性時間搜尋。Aho-Corasick 演算法有三個不同的階段。這些是 Go-to、Failure 和 Output。在 Go-to 階段,它使用所有關鍵字建立樹。在下一階段或 Failure 階段,它嘗試找到向後轉換以獲得某些關鍵字的適當字尾。在... 閱讀更多
2K+ 次瀏覽
它與之前的演算法類似。唯一的區別是,圖 G(V, E) 由鄰接表表示。鄰接表表示的時間複雜度為 O(E log V)。輸入和輸出輸入:成本矩陣:輸出:邊:A--B 和成本:1 邊:B--E 和成本:2 邊:A--C 和成本:3 邊:A--D 和成本:4 邊:E--F 和成本:2 邊:F--G 和成本:3 總成本:15演算法prims(g: Graph, start)輸入 - 圖 g 和名為“start”的種子頂點輸出 - 新增邊後的樹開始 建立兩個集合 B、N 將起始節點新增到 B ... 閱讀更多
給定一個連通圖 G(V, E),並且給出了每條邊的權重或成本。Prim 演算法將從圖 G 中找到最小生成樹。這是一種增量樹方法。該演算法需要一個種子值來啟動樹。種子頂點被擴充套件以形成整個樹。該問題將使用兩個集合來解決。一個集合儲存已選擇的節點,另一個集合儲存尚未考慮的專案。從種子頂點開始,它根據最小邊成本獲取相鄰頂點,從而透過... 閱讀更多
582 次瀏覽
給定到達時間和離開時間的列表。現在的問題是找到鐵路所需的最小站臺數量,因為沒有火車等待。透過對所有時間進行排序,我們可以很容易地找到解決方案,這將很容易跟蹤火車何時到達但未離開車站。這個問題的時間複雜度為 O(n Log n)。輸入和輸出輸入:到達時間和離開時間的列表。到達:{900, 940, 950, 1100, 1500, 1800} 離開:{910, 1200, 1120, 1130, 1900, 2000} 輸出:所需的最小站臺數量:3演算法minPlatform(arrival, departure, int n)輸入 - ... 閱讀更多
給定一個硬幣列表 C(c1, c2, ……Cn) 和一個值 V。現在的問題是使用最少的硬幣數量來構成 V。注意 - 假設有無限數量的硬幣 C在這個問題中,我們將考慮一組不同的硬幣 C{1, 2, 5, 10},每種型別的硬幣數量無限。為了構成所需的值,我們將嘗試取任意型別的最小數量的硬幣。例如,對於值 22 - 我們將選擇 {10, 10, 2}, ... 閱讀更多