最长回文子串

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-palindromic-substring

题目描述:

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

示例 1:

输入:s = "babad"
输出:"bab"
解释:"aba" 同样是符合题意的答案。

示例 2:

输入:s = "cbbd"
输出:"bb"

示例 3:

输入:s = "a"
输出:"a"

示例 4:

输入:s = "ac"
输出:"a"

思路:
  • 初始化左右指针,left,right.字符串长度len
  • 初始化i = 0(0 <= i < len)
  • 遍历字符串s,每轮初始left = i - 1(i左边的一个字符),right =i + 1(i右边的一个字符)
  • while(s.charAt(left)是否等于s.charAt(i))
    -- 是,left--
    -- 否,跳出循环
  • while(s.charAt(right)是否等于s.charAt(i))
    -- 是,right++
    -- 否,跳出循环
  • while(s.charAt(left)是否等于s.charAt(right))
    -- 是,left--,right++
    -- 否,跳出循环
    left与right之间的长度则是回文字符串的长度
代码实现:
class Solution {
    public int start = 0;
    public int maxLen = 0;
    public String longestPalindrome(String s) {
        if (s == null || s == "" || s.length() == 1) return s;
        
        int len = s.length();
        int left = 0, right = 0;

        for (int i = 1; i < len; i++) {
            left = i - 1;
            right = i + 1;
            while (left >= 0 && s.charAt(left) == s.charAt(i)) left--;
            while (right < len && s.charAt(right) == s.charAt(i)) right++;
            while (left >= 0 && right < len && s.charAt(left) == s.charAt(right)) {
                left--;
                right++;
            }
            int mark = right - left - 1;
            if (mark > maxLen) {
                maxLen = mark;
                start = left;
            }
        }
        return s.substring(start + 1, start + maxLen + 1);
    }
}

你可能感兴趣的:(最长回文子串)