力扣 5. 最长回文子串(中等)

题目

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

题解

核⼼思想是:对于字符串中每个字符都从中间开始向两边扩散来判断回⽂串。

传入两个指针 i 和 j,实现同时处理回⽂串长度为奇数和偶数的情况。

class Solution {
    public String longestPalindrome(String s) {
        String res = new String();
        for(int i = 0; i < s.length(); i++){
            // 以s[i]为中心的回文子串
            String s1 = Palindrome(s, i, i);
            // 以s[i]和s[i + 1]为中心的回文子串
            String s2 = Palindrome(s, i, i + 1);
            // res = Longest(res, len1, len2)
            res = res.length() >= s1.length() ? res : s1;
            res = res.length() >= s2.length() ? res : s2;
        }
        return res;
    }

    private String Palindrome(String s, int i, int j){
          while(i >= 0 && j < s.length() && s.charAt(i) == s.charAt(j)){
              i--;
              j++;
          }
          return s.substring(i + 1, j);  // [start, end)
    }
}

 

上一篇:《刻意练习之C#》-0017- C#中类和结构体的区别


下一篇:Palindrome-(Manacher算法)