🤖
AI审核中

5. 最长回文子串

文章摘要

本文介绍了求解“最长回文子串”问题的实现思路与代码。给定字符串 s,要求在其中找出最长的回文子串。核心算法采用中心扩展法:遍历可能的回文中心(包括字符本身和字符间的空隙),分别向左右两侧扩展,只要左右字符相等即继续扩展,并记录长度最大的子串。代码实现中,循环遍历 2·len‑1 个中心位置,通过 left、right 指针进行扩展比较,最终返回最长回文子串 result。示例输入 "babad"、"cbbd"、"a"、"ac" 均得到正确输出。

代码

package com.zou.d1116;

/**
 * @author: 邹祥发
 * @date: 2021/11/16 14:19
 * <p>
 * 5. 最长回文子串
 * <p>
 * 给你一个字符串 s,找到 s 中最长的回文子串。
 * <p>
 * 输入:s = "babad"
 * 输出:"bab"
 * 解释:"aba" 同样是符合题意的答案。
 * <p>
 * 输入:s = "cbbd"
 * 输出:"bb"
 * <p>
 * 输入:s = "a"
 * 输出:"a"
 * <p>
 * 输入:s = "ac"
 * 输出:"a"
 */
public class LongestPalindromeSubstring {
    public static void main(String[] args) {
        String s = "babad";
        System.out.println(longestPalindrome(s));
    }

    public static String longestPalindrome(String s) {
        // babad 求最长公共子串
        int len = s.length();
        String result = "";

        for (int i = 0; i < len * 2 - 1; i++) {
            int left = i / 2;
            int right = left + i % 2;
            while (left >= 0 && right < len && s.charAt(left) == s.charAt(right)) {
                String tmp = s.substring(left, right + 1);
                if (tmp.length() > result.length()) {
                    result = tmp;
                }
                left--;
                right++;
            }
        }
        return result;
    }
}

结果

0 条评论

如果你觉得文章对你有帮助,那就请作者喝杯咖啡吧

评论区 0

头像
 0 条评论