给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。
示例 1:
输入: "babad"
输出: "bab"
注意: "aba" 也是一个有效答案。
示例 2:
输入: "cbbd"
输出: "bb"
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-palindromic-substring
方法一:
动态规划
设状态dp[j][i]表示索引j到索引i的子串是否是回文串。则转移方程为:
则dp[j][i]为true时表示索引j到索引i形成的子串为回文子串,且子串起点索引为j,长度为i - j + 1。
算法时间复杂度为O(N ^ 2)。
class Solution {
public String longestPalindrome(String s) {
int length=s.length();
int[][] array=new int[length][length];
int max=1;
int start=0;
if(s.equals(""))
return "";
if(length==1)
return s;
for(int j=0;j<length;j++){
for(int m=0;m<=j;m++){
if(j-m<2){
if(s.charAt(j)==s.charAt(m)){
array[m][j]=1;
}
}else{
if(s.charAt(j)==s.charAt(m)){
array[m][j]=array[m+1][j-1];
}
}
if((array[m][j]==1)&&(max<=j-m+1)){
start=m;
max=j-m+1;
}
}
}
return s.substring(start,start+max);
}
}