题目描述
Given a string s, find the longest palindromic substring in s. You may assume that the maximum length of s is 1000.
Example:
Input: "babad"
Output: "bab"
Note: “aba” is also a valid answer.
Example:
Input: "cbbd"
Output: "bb"
题目链接:https://leetcode-cn.com/problems/longest-palindromic-substring/
解题思路
这里动态规划的思路是 dp[i][j] 表示的是 从i 到 j 的字串,是否是回文串。
则根据回文的规则我们可以知道:
如果s[i] == s[j] 那么是否是回文决定于 dp[i+1][ j - 1]
当 s[i] != s[j] 的时候, dp[i][j] 直接就是 false。
时间复杂度 O(n²)
程序实现
class Solution {
public String longestPalindrome(String s) {
//dp解法:
//dp[i][j]表示 i 到 j 的字符串能不能构成回文串,
//那么dp[i][j] = dp[i +1][j - 1] && (s[i] == s[j])
int count=0;
int len=s.length();
int maxStart=0,maxEnd=0;
int maxLength=0;
boolean dp[][]=new boolean[len][len];
for(int j=0;j<len;j++){
for(int i=0;i<=j;i++){
if(s.charAt(i)==s.charAt(j)&&(j-i<2 || dp[i+1][j-1])){
dp[i][j]=true;
if(j-i>maxLength){
maxLength=j-i;
maxStart=i;
maxEnd=j;
}
}
else{
dp[i][j]=false;
}
}
}
return s.substring(maxStart,maxEnd+1);
}
}