欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

最长回文子串-java版

程序员文章站 2022-10-03 14:45:24
题目LeetCode 5给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。示例 1:输入: "babad"输出: "bab"注意: "aba" 也是一个有效答案。示例 2:输入: "cbbd"输出: "bb"解法暴力尝试找出字符串的所有子串判断是否是回文子串,如果是找出其中的最大长的/** * 判断是否是回文 * @param str * @return */ public static bo...

题目

LeetCode 5
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。

示例 1:

输入: "babad"
输出: "bab"
注意: "aba" 也是一个有效答案。

示例 2:

输入: "cbbd"
输出: "bb"

解法

暴力尝试

找出字符串的所有子串判断是否是回文子串,如果是找出其中的最大长的

/**
     * 判断是否是回文
     * @param str
     * @return
     */
    public static boolean isPalindrome(String str){
        int length = str.length();
        for(int i = 0; i < length; i++){
            if(str.charAt(i) != str.charAt(length - i -1)){
                return false;
            }
        }
        return true;
    }

    /**
     * 子串暴力尝试判断
     * @param str
     * @return
     */
    public static String longestPalindrome(String str){
        int length = str.length();
        int maxLength = 0;
        String result = null;
        for(int i = 0; i < length; i++){
            for(int j = i + 1; j < length; j++){
                String subString = str.substring(i, j + 1);
                if(isPalindrome(subString) && subString.length() > maxLength){
                    maxLength = subString.length();
                    result = subString;
                }
            }
        }
        return result;
    }

public static void main(String[] args) {
        String str = "addaba";
        //String str = "aa";
        System.out.println(longestPalindrome(str));
       
    }

动态规划法

思路与算法
最长回文子串-java版
最长回文子串-java版

/**
     * 动态规划版解法
     * @param s
     * @return
     */
    public static String longestPalindromeDynamicProgramming(String s) {
        int n = s.length();
        boolean[][] dp = new boolean[n][n];
        String ans = "";
        for (int l = 0; l < n; ++l) {
            for (int i = 0; i + l < n; ++i) {
                int j = i + l;
                if (l == 0) {
                    dp[i][j] = true;
                } else if (l == 1) {
                    dp[i][j] = (s.charAt(i) == s.charAt(j));
                } else {
                    dp[i][j] = (s.charAt(i) == s.charAt(j) && dp[i + 1][j - 1]);
                }
                if (dp[i][j] && l + 1 > ans.length()) {
                    ans = s.substring(i, i + l + 1);
                }
            }
        }
        return ans;
    }

public static void main(String[] args) {
        String str = "addaba";
        //String str = "aa";
        System.out.println(longestPalindromeDynamicProgramming(str));
    }

参考 https://leetcode-cn.com/problems/longest-palindromic-substring/ 官方解法

本文地址:https://blog.csdn.net/lzx_2011/article/details/109265058