标签:style color io os ar java for sp div
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.
public class Solution {
char special=0;
public String longestPalindrome(String s) {
if(s==null||s.length()<=1)
{
return s;
}
StringBuilder builder=new StringBuilder(2*s.length()+1);
int i;
for(i=0;i<s.length();i++)
{
builder.append(special);
builder.append(s.charAt(i));
}
builder.append(special);
int []p=new int[builder.length()];
int maxPosition=0;
int central=0;
int index=0;
p[0]=1;
for(i=1;i<builder.length();i++)
{
if(maxPosition>=i)
{
p[i]=Math.min(p[2*central-i],maxPosition-i+1);
}
else
{
p[i]=1;
}
while(i-p[i]>=0&&i+p[i]<builder.length())
{
if(builder.charAt(i-p[i])==builder.charAt(i+p[i]))
{
p[i]++;
}
else
{
break;
}
}
if(i+p[i]-1>=maxPosition)
{
central=i;
maxPosition=i+p[i]-1;
}
if(p[index]<p[i])
{
index=i;
}
}
StringBuilder result=new StringBuilder(p[index]-1);
for(i=index-p[index]+1;i<index+p[index];i++)
{
if(builder.charAt(i)!=special)
{
result.append(builder.charAt(i));
}
}
return result.toString();
}
}标签:style color io os ar java for sp div
原文地址:http://blog.csdn.net/jiewuyou/article/details/39735471