您的位置:首页 > 其它

[LeetCode] Longest Palindromic Substring

2013-07-27 11:08 405 查看
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.

之前写过一篇讲这个问题,但忘记当时有没有写代码了,这次写的时候发现那篇帖子里的代码有一些不妥的地方。

/article/8613971.html

还是那个思路,注意除了要构造成 '#a#a#b#c' 这样,还要在头和尾添加两个不相同的字符’$','%'来做哨兵,防止越界。

另外 while(tmp[i-len[i]]==tmp[i+len[i]])

++len[i]

这一行之后要减一才行,大家可以举个例子试一下。

#define pb push_back
class Solution {
public:
string longestPalindrome(string s) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
string tmp=create(s);
int n=tmp.length();
vector<int> len(n,0);
int id=1,mx=1;
int ans=0,mxl=-1;
for(int i=2;i<n-1;i++)
{
if( i<mx )
len[i]=min(len[2*id-i],mx-i+1);
while(tmp[i-len[i]]==tmp[i+len[i]])
++len[i];
--len[i];
if ( i+len[i] > mx)
id=i,mx=i+len[i];
if( len[i] > mxl)
{
mxl=len[i];
ans=i;
}
}
int mid = ( (ans-1)>>1 );
int start=mid-(len[ans]>>1);;

return s.substr(start,mxl);

}
string create(string& s)
{
int n=s.length();
string news;
news.pb('$');
for(int i=0;i<n;i++)
{
news.pb('#');
news.pb(s[i]);
}
news.pb('#');
news.pb('%');
return news;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: