您的位置:首页 > 其它

leetcode-5. Longest Palindromic Substring(寻找最长回文子串)

2017-06-04 22:25 645 查看
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;

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  string leetcode