您的位置 首页 java

最长回文子串5. 最长回文子串

求出:

  1. 最长的长度
  2. 输出字符串

解法:动态规划,具体解释在代码里面:加油P

 import java.util.*;

public class Solution {
    public int getLongestPalindrome(String A, int n) {
        // write code here
        boolean[][] dp = new boolean[n][n];//明确dp 数组定义: 从i 到j 范围内是不是回文串
        
        int max = 0;
        
        for(int len = 0 ; len < n ; len ++){//遍历背包,长度。从0 开始到最大。
            for(int i = 0; i < n - len ; i++){//防止j 越界
                int j = i + len ;
                if(A.charAt(i) == A.charAt(j)){
                    if(len == 0 || len == 1){
                        dp[i][j] = true;
                    }else{
                        dp[i][j] = dp[i+1][j-1];//往里缩一下,如果是真,那么这个i, j 范围也是真;
                    }
                    if(dp[i][j]){
                        max = Math.max(max, len+1);
                    }
                }
            }
        }
        return max;
    }
}


class Solution {
    public String longestPalindrome(String A) {

        int max = 0;
        int n = A.length();
        boolean[][] dp = new boolean[n][n];//明确dp 数组定义: 从i 到j 范围内是不是回文串
        
        int left = 0;
        int right = 0;
        for(int len = 0 ; len < n ; len ++){//遍历背包,长度。从0 开始到最大。
            for(int i = 0; i < n - len ; i++){
                int j = i + len ;
                if(A.charAt(i) == A.charAt(j)){
                    if(len == 0 || len == 1){
                        dp[i][j] = true;
                    }else{
                        dp[i][j] = dp[i+1][j-1];//往里缩一下,如果是真,那么这个i, j 范围也是真;
                    }
                    if(dp[i][j]){
                        max = Math.max(max, len+1);
                        left = i; //棒,在牛客17题基础上加个这个就行了。
                        right = max + i;
                    }
                }
            }
        }
        return A.substring(left,right); //这是截取子串
        // return max; //这是求最大长度
    }

}
  

文章来源:智云一二三科技

文章标题:最长回文子串5. 最长回文子串

文章地址:https://www.zhihuclub.com/177071.shtml

关于作者: 智云科技

热门文章

网站地图