20 动态规划解最长回文子序列

问题描述:给定一个字符串s,找到其中最长的回文子序列,并返回该序列的长度,可以假设s的最大长度为1000;

暴力解法:直接两个循环,遍历所有子串,并统计子串的最大长度;

public int maxLengthPalindrome(String s)
{
int max=1;
for(int i=0;iindexStart)
{
if(s.charAt(indexEnd)!=s.charAt(indexStart))
{
flag=false;
break;
}
end--;
start++;
}
​​​​​​​return max;
}

动态规划求解:暴力求解法时间复杂度为O(n3),使用动态规划可以降低到O(n2),使用dp[i][j]表征是否为回文子串,如果s.charAt(i)==s.charAt(j),dp[i][j]=dp[i-1][j-1];(此处要考虑j-i==1的情景),否则为0

public maxLengthPalindrome(String s)
{
Boolean dp[][]=new Boolean[s.length()][s.length()];
if(s.charAt(0)==s.charAt(1))
{
dp[0][1]==true;
}else
{
dp[0][1]=false;
}
int max=Interger.MIN_VALUE;
for(int i=1;i

你可能感兴趣的:(JAVA刷题500道,动态规划,算法,java)