最长回文子串

 

1、dp

dp[i][j] = (dp[i+1][j-1]) 这种 i 为由后推前的需要倒序写,而 j 是由前推后的正序就可以了。

 

    public String longestPalindrome(String s) {
        if(s.length() < 2)return s;
    	boolean [][]dp = new boolean[s.length()][s.length()];
        int n = s.length();
        String res = s.substring(0,1);
        for(int i = n-1; i >= 0; --i){
        	for(int j = i; j < n; ++j){
        		dp[i][j] = (s.charAt(i) == s.charAt(j)) && (j-i < 3 || dp[i+1][j-1]);
        		if(dp[i][j]){
        			if(j-i+1 >= res.length()){
        				res = s.substring(i,j+1);
        			}
        		}
        	}
        }
        return res;
    }

 

你可能感兴趣的:(区间dp)