应用一下manacher算法就可以O(n)求出结果了。可以参考hdu3068
substr(start,length)函数是这样用的:
substr 方法
返回一个从指定位置开始,并具有指定长度的子字符串。
参数
start
必选。所需的子字符串的起始位置。字符串中第一个字符的索引为 0。
length
可选项。返回的子字符串中包含的字符数。
备注
如果 length 为 0 或负数,将返回一个空字符串。如果没有指定该参数,则子字符串将延续到字符串的结尾。
class Solution { public: int min(int a,int b){ return a<b?a:b; } string longestPalindrome(string s) { int len=s.length(); int p[len<<1|1]; memset(p,0,sizeof(p)); string st; for(int i=0;i<len;i++){ st+='#'+s.substr(i,1); } st+='#'; //cout<<st<<endl; len=len*2+1; int wid=0,id=0,Max=0,ans=0; for(int i=1;i<len;i++){ if(i<wid){ p[i]=min(p[2*id-i],wid-i); } else p[i]=1; for(;i-p[i]>=0&&st[i+p[i]]==st[i-p[i]];p[i]++); //cout<<p[i]<<endl; if(i+p[i]>wid){ wid=i+p[i]; id=i; } if(p[i]-1>Max){ ans=i; Max=p[i]-1; } } //cout<<ans<<' '<<Max<<endl; return s.substr((ans-Max)/2,Max); } };