最长回文子串-动态规划
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); } }
动态规划状态方程
二维数组
dp[i][j]=max(dp[i-1][j],dp[i-1][j-c[i]]+w[i]); i=1....n;j=0......v
一维数组
dp[j]=max(dp[j],dp[j-c[i]]+w[i]); i=1....n,j=v....0

浙公网安备 33010602011771号