最长回文子串-动态规划

class Solution {
    public String longestPalindrome(String s) {
        //动态规划
        
        //不存在
        if(s==null)return null;
        //长度为0
        if(s.length()==0)return "";
        int length=s.length();
        char [] sToArray=s.toCharArray();
        boolean [][] dp=new boolean[length][length];
        int maxlen=1;
        int fromindex=0;
        int todex=1;
        //初始化
        for(int i=0;i<length;i++){
            dp[i][i]=true;
            if(i+1<length&&sToArray[i]==sToArray[i+1]){
                dp[i][i+1]=true;
                maxlen=2;
                fromindex=i;
                todex=i+1+1;
            }
        }
        //dp
        for(int i=2;i<length;i++){
            for(int j=0;j<i-1;j++){
                dp[j][i]=dp[j+1][i-1]&&sToArray[j]==sToArray[i];
                if(dp[j][i]&&i-j+1>maxlen){
                    maxlen=i-j+1;
                    fromindex=j;
                    todex=i+1;
                }
            }
        }
        return s.substring(fromindex,todex);
    }
}

猜你喜欢

转载自www.cnblogs.com/NeverGiveUp0/p/11135637.html
今日推荐