導航:首頁 > 源碼編譯 > 演算法幾乎迴文串

演算法幾乎迴文串

發布時間:2025-01-01 04:53:33

1. 演算法學習筆記(83): Manacher演算法

Manacher演算法,俗稱馬拉車,是一種專門處理迴文子串問題的演算法。迴文串有奇偶兩種形式:奇迴文串和偶迴文串。奇迴文串相較於偶迴文串更易處理,因其存在唯一的中心點。通過在原字元串兩端添加一個不在字元集內的特殊字元,如空格或特定符號,可以將奇迴文串轉變成以普通字元為中心的奇迴文串,而偶迴文串則會變為以特殊字元為中心的奇迴文串。

對於字元串S,定義一個數組P,表示以字元為中心的奇迴文串的數量。在預處理後,P中的值對應原字元串中以特殊字元為中心的迴文串。最長的迴文子串長度是P中的最大值。

Manacher演算法通過遍歷字元串並維護中心點與邊界點的位置,高效求解P數組。與Z演算法類似,演算法流程中,數組P值遞增,內層循環執行次數不超過字元串長度,因此演算法復雜度為線性。

2. 迴文序列問題

Example 1:
Input: 121
Output: true
Example 2:
Input: -121
Output: false
Explanation: From left to right, it reads -121. From right to left, it becomes 121-. Therefore it is not a palindrome.

示例 1:
輸入:s = "babad"
輸出:"bab"
解釋:"aba" 同樣是符合題意的答案。
時間復雜度: O(n^2) 兩個for循環
空間復雜度: O(n^2) dp數組的大小

給你一個字元串 s,請你將 s 分割成一些子串,使每個子串都是 迴文串 。返回 s 所有可能的分割方案。
迴文串 是正著讀和反著讀都一樣的字元串。
示例 1:
輸入:s = "aab"
輸出:[["a","a","b"],["aa","b"]]
思路:動態規劃得到每個子串是否為迴文子串,然後從頭開始回溯演算法
時間復雜度:O(N * 2^N)

給你一個字元串 s,請你將 s 分割成一些子串,使每個子串都是迴文。
返回符合要求的 最少分割次數 。
示例 1:
輸入:s = "aab"
輸出:1
解釋:只需一次分割就可將 s 分割成 ["aa","b"] 這樣兩個迴文子串。
思路:

時間復雜度=空間復雜度=O(n^2)

給你一個字元串 s ,請你統計並返回這個字元串中 迴文子串 的數目。
迴文字元串 是正著讀和倒過來讀一樣的字元串。
子字元串 是字元串中的由連續字元組成的一個序列。
具有不同開始位置或結束位置的子串,即使是由相同的字元組成,也會被視作不同的子串。
示例 1:
輸入:s = "abc"
輸出:3
解釋:三個迴文子串: "a", "b", "c"

給你一個字元串 s ,找出其中最長的迴文子序列,並返回該序列的長度。
子序列定義為:不改變剩餘字元順序的情況下,刪除某些字元或者不刪除任何字元形成的一個序列。
示例 1:
輸入:s = "bbbab"
輸出:4
解釋:一個可能的最長迴文子序列為 "bbbb" 。

給定一個字元串 S,找出 S 中不同的非空迴文子序列個數,並返回該數字與 10^9 + 7 的模。
通過從 S 中刪除 0 個或多個字元來獲得子序列。
如果一個字元序列與它反轉後的字元序列一致,那麼它是迴文字元序列。
如果對於某個 i,A_i != B_i,那麼 A_1, A_2, ... 和 B_1, B_2, ... 這兩個字元序列是不同的。
示例 1:
輸入:
S = 'bccb'
輸出:6
解釋:
6 個不同的非空迴文子字元序列分別為:'b', 'c', 'bb', 'cc', 'bcb', 'bccb'。
注意:'bcb' 雖然出現兩次但僅計數一次。

閱讀全文

與演算法幾乎迴文串相關的資料

熱點內容
什麼是金稅盤伺服器 瀏覽:434
phpsocket開發 瀏覽:507
caj文檔轉pdf 瀏覽:550
eclipsemaven命令配置 瀏覽:335
雅安視監控app叫什麼名字 瀏覽:729
東方財富app籌碼藍色和紅色是什麼 瀏覽:564
pr安裝文件夾圖標變白 瀏覽:177
如何用伺服器建設網站 瀏覽:347
定時鬧鍾單片機課程設計 瀏覽:537
腰椎壓縮性骨折症狀 瀏覽:466
絕地求生全軍出擊的伺服器什麼時候開 瀏覽:492
怎麼入侵游戲伺服器篡改數據 瀏覽:736
線性壓縮機原理 瀏覽:543
javanewinstance 瀏覽:817
程序員第一玄學 瀏覽:499
精品源碼怎麼算 瀏覽:493
加密技術在現實中應用體會 瀏覽:182
單片機如何換晶振 瀏覽:208
合並兩個數組java 瀏覽:15
命令標注圓半徑怎麼用 瀏覽:662