LeetCode回文相關

2021-09-14 00:55:17 字數 2933 閱讀 9943

目錄

647. 回文子串(獲取所有的子串)

方法一: 奇數和偶數拓展

方法二:(動態規劃)(重要)

5. 最長回文子串

方法一:拓展 然後更新最長的數

680. 驗證回文字串 ⅱ(可以刪除乙個字元)

方法一:遇到不對勁直接刪除然後再對比

131. 分割回文串

方法一:遞迴 (重要)

給定乙個字串,你的任務是計算這個字串中有多少個回文子串。

具有不同開始位置或結束位置的子串,即使是由相同的字元組成,也會被計為是不同的子串。

示例 1:

輸入: "abc"

輸出: 3

解釋: 三個回文子串: "a", "b", "c".

示例 2:

輸入: "aaa"

輸出: 6

說明: 6個回文子串: "a", "a", "a", "aa", "aa", "aaa".

對每個數進行 基於 i 的奇數回文拓展和基於i 和 i + 1 的偶數回文拓展

class solution 

return res;

}void helper(string s, int i, int j, int& res)

}};

i 和 j 的遍歷方式是由 dp[ i + 1 ][ j - 1 ] 決定的。dp[ i ][ j ]表示字串i到j是回文串。

已知 j >= i ;

當j = i時 , (s[i] == s[j]) 判斷足夠。

當 j= i + 1時  , (s[i] == s[j]) 判斷足夠。

當 j= i + 2時  , (s[i] == s[j]) 判斷足夠。

當 j= i + 3及更大的數時  , (s[i] == s[j]) 判斷之上 還要加上 中間部分是回文的判斷。

class solution 

}return res;

}};

給定乙個字串s,找到s中最長的回文子串。你可以假設s的最大長度為 1000。

示例 1:

輸入: "babad"

輸出: "bab"

注意: "aba" 也是乙個有效答案。

示例 2:

輸入: "cbbd"

輸出: "bb"

對每個數進行 基於 i 的奇數回文拓展和基於i 和 i + 1 的偶數回文拓展

然後更新當前的最長數目。

class solution 

return s.substr(start, maxlen);

}void searchpalindrome(string s, int left, int right, int& start, int& maxlen)

if (maxlen < right - left - 1)

}};

示例 2:

輸入: "abca"

輸出: true

解釋: 你可以刪除c字元。

這裡我出了乙個錯 可見另一篇部落格

實際的做法很簡單 刪除再判斷就ok了。

class solution 

return true;

}bool isvalid(string s, int left, int right)

return true;

}};

給定乙個字串 s,將s 分割成一些子串,使每個子串都是回文串。

返回 s 所有可能的分割方案。

示例:

輸入: "aab"

輸出:[

["aa","b"],

["a","a","b"]

]

遞迴的方法,其中判斷是否是回文可以用函式單獨實現  這裡用動態規劃實現起來快了很多 但是好麻煩哦 所以簡單的方法在下面我也記錄了一下

class solution }}

helper(s, 0, dp, out, res);

return res;

}void helper(string s, int start, vector>& dp, vector& out, vector>& res)

for (int i = start; i < s.size(); ++i)

}};

class solution 

void helper(string s, int start, vector& out, vector>& res)

for (int i = start; i < s.size(); ++i)

}bool ispalindrome(string s, int start, int end)

return true;

}};

建立了乙個三維陣列的res,這裡的res陣列其實也可以看作是乙個dp陣列,其中 res[i] 表示前 i 個字元組成的子串,即範圍 [0, i+1] 內的子串的所有拆分方法,那麼最終只要返回 res[n] 極為所求。

class solution );

vector> dp(n, vector(n));

for (int i = 0; i < n; ++i) }}

}return res[n];

}};

leetcode回文子串相關程式設計題集合

回文,顧名思義就是段字元顛倒過來和它本身是相同的。如abcba和abba,正著讀反著讀都是它本身。在leetcode上關於回文的題我們將在這裡進行乙個總結。回文問題大多用動態規劃和雙指標指標來解決 判斷乙個字串是不是回文子串其實只要比較s和s 1 就可以實現。但是問題是每次都會給你附加一些其他的。第...

回文相關演算法

每次面試的時候問演算法的時候否 近期計畫去刷一下演算法,也在此做一下記錄 判斷乙個正整數是不是回文數。回文數的定義是,將這個數反轉之後,得到的數仍然是同乙個數。11,121,1,12321 這些是回文數。23,32,1232 這些不是回文數。依次對num取餘,採用臨時引數reverse 記錄轉化後的...

回文數相關

例子 輸入 121 輸出 true 輸入 121 輸出 falsebool ispalindrome int x int r 0 while x r return x r x r 10 12 123 10 解析 快慢指標找到鍊錶的中點。12321,slow指到3,讓fast指向slow.next為2...