区间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);
}
}
我有一壶酒
足以慰风尘
尽倾江海里
赠饮天下人

浙公网安备 33010602011771号