区间dp

区间dp是dp的一种,指的是求一段区间上的最优解,其状态由小区间转换而来,dp的思路就是 先枚举 区间长度 再枚举 区间左端点

例题


//若是回文字符串,则首和尾相等,且去掉首尾后仍是回文字符串
class Solution {
    public String longestPalindrome(String s) {
      int n=s.length();
      if(n<2){
          return s;
      }
      int[][] dp=new int[n][n];
      for(int i=0;i<n;i++){
          dp[i][i]=1;
      }
      int maxlen=1;
      int begin=0;
      char[] chars=s.toCharArray();
      //枚举区间长度
      for(int len=2;len<=n;len++){
          //枚举区间左端点
          for(int i=0;i+len-1<n;i++){
              int j=i+len-1;
              if(chars[j]==chars[i]){
                  if(len==2){
                      dp[i][j]=1;
                  }else{
                      dp[i][j]=dp[i+1][j-1];
                  }
              }else{
                  dp[i][j]=0;
                  continue;
              }
              if(dp[i][j]==1 && len>maxlen){
              begin=i;
              maxlen=len;
          }
          }
      }
      return s.substring(begin,begin+maxlen);
    }
}
posted @ 2021-06-16 14:35  刚刚好。  阅读(60)  评论(0)    收藏  举报