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 中找到最小生成樹。這是一種不斷增長的樹方法。該演算法需要一個種子值來啟動樹。種子頂點被擴充套件以形成整個樹。該問題將使用兩個集合來解決。一個集合包含已選擇的節點,另一個集合包含尚未考慮的專案。從種子頂點開始,它根據最小邊成本獲取相鄰頂點,從而透過... 閱讀更多
583 次瀏覽
給定列車到達和離開時間列表。現在的問題是找到鐵路所需的最小站臺數量,前提是沒有任何列車等待。透過對所有時間進行排序,我們可以很容易地找到解決方案,這將很容易跟蹤列車何時到達但尚未離開車站。這個問題的時間複雜度為 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}, … 閱讀更多