leetcode腾讯精选练习50(3)——最长回文子串
题目
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。
示例 1:
输入: “babad”
输出: “bab”
注意: “aba” 也是一个有效答案。
示例 2:
输入: “cbbd”
输出: “bb”
解法思路
第一时间想到的自然是比较暴力的方法,即将字符串逆序后与源字符串比较,得到公共子串,这个子串存在问题,比如输入:“aacijjoijcaa",输出:"aac“,很明显这不是一个回文字符串。这样就要对每个可能的子串进行检验,可以是逆序过来和源字符串比较,这样出来的程序虽然正确,但时间复杂度O(N^3),提交后超时,然后我看了官方题解……
这里用到的主要是中心拓展,我们观察到回文中心的两侧互为镜像。因此,回文可以从它的中心展开,并且只有 2n - 1个这样的中心。为什么会是 2n−1 个,而不是 n 个中心?原因在于所含字母数为偶数的回文的中心可以处于两字母之间(例如 “abba” 的中心在两个 ‘b’ 之间)。
代码
Java
public String longestPalindrome(String s) {
if (s == null || s.length() < 1) return "";
int start = 0, end = 0;
for (int i = 0; i < s.length(); i++) {
int len1 = expandAroundCenter</