最大回文子串

public String longestHuiwenStr(String str) {
    if (str==NULL||str.length()==1) {
        return str;
    }
    int len = str.length();
    boolean[][] dp = new boolean[len][len];  //默认值是false
    
    String res = str.substring(0,1); //[0,1)
    
    for (int j=0; j<len; j++){
    
        for (int i=0; i<=j; i++){//从i到j,必然i<=j。i在内,也必然先有j。
            
            char head = str.charAt(i);
            char tail = str.charAt(j);
            //j-i=0,单个元素,一定回文。
            //j-i=1,两个元素相等,一定回文。
            //j-i=2,三个元素,两边元素相等,一定回文。
            //两边相等,中间回文,一定回文。
            dp[i][j] = (head==tail) &&(j-i <= 2 || dp[i+1][j-1]);
            
            if (dp[i][j]){
                if (j-i+1 > res.length()){
                    res = str.substring(i, j + 1);
                }
            }
        }
    }
    return res;
}
原文地址:https://www.cnblogs.com/shijianchuzhenzhi/p/13048009.html