知识点:双指针

对于最长回文子串的判断,我们可以从任意位置开始,双指针向两侧移动,直至左右指针指向不同的字符为止,当当前的回文子串长度大于已记录的回文子串长度时,更新全局指针。对于回文串来说,可能出现长度为奇数和偶数的情况,故双指针的起始位置要分情况讨论,当左右指针初始位置相同时代表奇数长度的回文子串,左右指针初始位置相邻代表偶数长度的回文子串。

Java题解如下

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param s string字符串 
     * @return string字符串
     */

    private int start = 0;
    private int end = 0;

    public String longestPalindrome (String s) {
        // write code here
        for(int i = 0; i < s.length() - 1; i++) {
            getStr(s, i, i);
            getStr(s, i, i + 1);
        }
        return s.substring(start, end + 1);
    }

    private void getStr(String s, int left, int right) {
        while(left >= 0 && right < s.length() && s.charAt(left) == s.charAt(right)) {
            left--;
            right++;
        }
        left++;
        right--;
        if(right - left > end - start) {
            start = left;
            end = right;
        }
    }
}