您的位置:首页 > 其它

5.Longest Palindromic Substring

2015-09-16 13:13 204 查看

题目

Given a string S,
find the longest palindromic substring in S.
You may assume that the maximum length of S is
1000, and there exists one unique longest palindromic substring.

解题思路

1.使用DP的时空复杂度均为O(n^2),超时
2.枚举所有的中心(实际的和虚拟的字符),求出以该中心形成的最长回文串,再剪枝(当前最长回文串 < 以当前中心能形成的最长回文串)。

代码

public String longestPalindrome(String s) {

if(s.length()<=1)
return s;

String str=s.substring(0,1);
int max=1;
int N=2*s.length()-3;
int[][] p=new int
[2];
int f,b;

for(int i=0;i<N;++i){		//initialization
p[i][0]=i/2;
p[i][1]=p[i][0]+1+i%2;
}

for(int i=0;i<=N/2 && max<s.length()-i;++i){     //length=s.length()-i
f=p[N/2-i][0];
b=p[N/2-i][1];
while(f>=0 && s.charAt(f)==s.charAt(b)){--f;++b;}
if(b-f-1>max)
{
max=b-f-1;
str=s.substring(f+1,b);
}

f=p[N/2+i][0];
b=p[N/2+i][1];
while(i!=0 && b<s.length() && max<s.length()-i && s.charAt(f)==s.charAt(b)){--f;++b;}
if(b-f-1>max)
{
max=b-f-1;
str=s.substring(f+1,b);
}

}

return str;
}


运行结果

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