目錄
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...