推荐网站网页,哪些人是建网站的,网页设计代码开头,网站建设定制开发价格问题描述#xff1a;给定一个字符串s#xff0c;找到其中最长的回文子序列#xff0c;并返回该序列的长度#xff0c;可以假设s的最大长度为1000#xff1b;
暴力解法#xff1a;直接两个循环#xff0c;遍历所有子串#xff0c;并统计子串的最大长度#xff1b;
pu…问题描述给定一个字符串s找到其中最长的回文子序列并返回该序列的长度可以假设s的最大长度为1000
暴力解法直接两个循环遍历所有子串并统计子串的最大长度
public int maxLengthPalindrome(String s)
{
int max1;
for(int i0;is.length();i)
{
for(int j0;ji;j)
{
if(isPalindrome(s,i,j))
{
maxMath.max(j-i1,max);
}
}
}
return max;
}
private Boolean isPalindrome(String s,int indexStart,indexEnd)
{
if((indexEnd-indexStart)1)
{
if(s.charAt(indexEnd)s.charAt(indexStart))
{
return true;
}else
{
return false;
}
}
int startindexStart;
int endindexEnd;
Boolean flagtrue;
while(indexEndindexStart)
{
if(s.charAt(indexEnd)!s.charAt(indexStart))
{
flagfalse;
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-i1的情景)否则为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 maxInterger.MIN_VALUE;
for(int i1;is.length();i)
{
for(int ji1;jlength;j)
{
if(s.charAt(i)s.charAt(j))
{
if(j-i1)
{
dp[i][j]true;
maxMath.max(max,2);
}else
{
dp[i][j]dp[i-1][j-1];
maxMath.max(max,j-i1);
}
}
else
{
dp[i][j]false;
}
}
}
return max;
}