给你一个字符串 s,找到 s 中最长的回文子串。

    示例 1:

    输入:s = “babad”
    输出:”bab”
    解释:”aba” 同样是符合题意的答案。
    示例 2:

    输入:s = “cbbd”
    输出:”bb”
    示例 3:

    输入:s = “a”
    输出:”a”
    示例 4:

    输入:s = “ac”
    输出:”a”

    提示:

    1 <= s.length <= 1000
    s 仅由数字和英文字母(大写和/或小写)组成


    1. class Solution {
    2. /**
    3. 对每个点进行左右扩散,寻找最长的距离,需要对起始一个长度和起始两个长度扩散
    4. */
    5. public int[] is_valid(String s, int l, int r) {
    6. while (l >= 0 && r < s.length() && s.charAt(l) == s.charAt(r)){
    7. l--;
    8. r++;
    9. }
    10. return new int[]{++l,--r};
    11. }
    12. public String longestPalindrome(String s) {
    13. int n = s.length();
    14. int start = 0, end = 0;
    15. for (int i = 0; i < n; ++i) {
    16. int[] a = is_valid(s,i,i);
    17. int[] b = is_valid(s,i,i+1);
    18. if (a[1] - a[0] > end - start) {
    19. start = a[0];
    20. end = a[1];
    21. }
    22. if (b[1] - b[0] > end - start) {
    23. start = b[0];
    24. end = b[1];
    25. }
    26. }
    27. return s.substring(start,end+1);
    28. }
    29. }