字串專題總結

2021-10-05 21:57:50 字數 1019 閱讀 8185

回文串包括一系列的題目,例如:求乙個字串中回文串的個數,求乙個字串中回文串的最大長度,求乙個回文串中最長的回文串。其實只要掌握了高效判斷字串是否是回文串的方法,這類題目就迎刃而解了。

判斷是否是回文串的方法:

動態規劃:dp[i][j] 以 下標 i 開始 下標 j 結束的字串是否是回文串 ,可以基於其之前的結果進行斷定 ,取決於(dp[i - 1][j - 1] 以及 str[i] == str[j]),要特殊判斷下子串長度為1和2的情況。時間複雜度o(n^2)

中心擴充套件法:以每個字元為中心向兩端擴充套件,分別統計以下標為 i 的字元 和 (i, i + 1)這兩個字元向兩端擴充套件的情況,時間複雜度o(n^2)

馬拉車演算法:時間複雜度 o(n)

具體參考:

leetcode409. 最長回文串:

leetcode647.回文子串:

leetcode5.最長回文子串:

首先要區分開這兩個題目,也就是要明白子串和子串行的區別:

處理這兩個問題的方法都是動態規劃,但是二者的陣列的含義和狀態轉移方程的區別。

假設有兩個字串str1和str2.

最長公共子串

說明:按照動態規劃的方法求出了最長公共子串的長度,可以尋找該長度在dp中的位置,來找出該子串,但要注意,該子串可能不止1個。

最長公共子串行

**參考:

在主串t中找到子串p(模式串)的起始位置。

kmp演算法是對暴力演算法的優化,暴力演算法是從主串t的每乙個字元開始匹配,如果不成功則繼續從主串的下乙個位置和子串的開始位置進行匹配。暴力演算法會涉及到主串和子串的多次回溯操作,而kmp只會一次掃瞄主串只回溯子串即可達到目標,其核心在於next陣列來重置子串的下標位置保證主串不需要回溯。

kmp演算法過程:

詳細內容參考:

拓展:位元組的筆試題 本質是求字串的週期,可以借助kmp演算法的next陣列的求法,來求週期。

詳細參考:

字串專題

created on 2019年12月1日 author hp 擷取字串 str2 我是迪迦奧特曼 str3 str2 5 str4 str2 0 len str2 2 print str3,str4 擷取的字串如果不存在,會出現異常,可以用try.except捕捉異常 try str5 str2 ...

字串專題

給定乙個字串,你的任務是計算這個字串中有多少個回文子串。具有不同開始位置或結束位置的子串,即使是由相同的字元組成,也會被視作不同的子串。示例1 輸入 abc 輸出 3 解釋 三個回文子串 a b c 示例 2 輸入 aaa 輸出 6 解釋 6個回文子串 a a a aa aa aaa 解法 1 動態...

字串專題

1.double ceil double x 求大於 x 的最小的數,即向上取整函式 includeusing namespace std intmain 2.a 65 z 90 a 97 z 122 3.字串刪除 c 從string中刪除所有的某個特定字元 超好 includeusing name...