5. 最长回文子串

it2025-10-04  2

描述:

给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。

示例:

输入: "babad" 输出: "bab" 注意: "aba" 也是一个有效答案。 输入: "cbbd" 输出: "bb"

想法:

最简单的就是分两种情况,一种中心扩散的,那就向两边遍历,另一种就是中心是两个的,那就和大一个的一起向外扩散马拉车算法 Manacher:也就是将两种情况合并,中心为两个的情况,就是0.5,但是索引不能为小数,所以相当于所有扩大两倍之后,就可以两种情况合并 static public string LongestPalindrome(string s) { int n = 0, index = 0; int k; for (int i = 0; i < s.Length; i++) { k = 0; while (i - k >= 0 && i + k < s.Length && s[i - k] == s[i + k]) { k++; } k--; if (2 * k + 1 > n) { index = i - k; n = 2 * k + 1; } } for (int i = 0; i < s.Length; i++) { k = 0; while (i - k >= 0 && i + k + 1 < s.Length && s[i - k] == s[i + k + 1]) { k++; } k--; if (2 * k + 2 > n) { index = i - k; n = 2 * k + 2; } } return s.Substring(index, n); } ##具体参见官网原题解析
最新回复(0)