https://leetcode.com/problems/longest-palindromic-substring/#/description
问题描述:
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"
思路解析:
给定一个字符串s
采用dp的思想,boolean数组dp[i][j]代表s(i … j)是一个回文串,当且仅当dp[i+1][j-1]为真并且s[i]==s[j].
我们考虑子串的长度1和2时,手动填充到数组中,3~length-1单独考虑。
记录起始位置和最长子串的长度。
如果一个字符串里面没有回文串,返回第一个字符比如”abcde” 则返回”a”
代码如下:
public class Solution {
public String longestPalindrome(String s) {
int len=s.length();
int start=0,max=0;
if(s.length()==1)return s;
boolean[][] dp=new boolean[len][len];
for(int i=0;i<len;i++)
{
dp[i][i]=true;
if(i<len-1 && s.charAt(i)==s.charAt(i+1) )
{
dp[i][i+1]=true;
max=2;
start=i;
}
}
for(int strlen=3; strlen<=len ;strlen++)
{
//i最终移到len+strlen的位置,才能保证这个子串的长度为是strlen
for(int i=0;i<=len-strlen;i++)
{
int j=i+strlen-1;
if(s.charAt(i)==s.charAt(j) && dp[i+1][j-1])
{
dp[i][j]=true;
start=i;
max=strlen;
}
}
}
if(max>0)
return s.substring(start,start+max);
else
{
//如果一个字符串里面没有回文串,返回第一个字符
return s.substring(0,1);
}
// return null;
}
}