您的位置:首页 > 其它

LeetCode Longest Palindromic Substring

2012-11-17 21:29 531 查看
Longest Palindromic Substring

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.


Tips:

O(n) solution:

http://www.felix021.com/blog/read.php?2040

Such a beautiful analysis.

Solution:

class Solution {
public:
string longestPalindrome(string s) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
vector<int> P;
string ss;
P.resize(s.size()*2+1);
ss.resize(s.size()*2+1);
for(int i=0;i<s.size();++i){
ss[i*2]='#';
ss[i*2+1]=s[i];
}
ss[s.size()*2]='#';
P[0]=0;P[1]=1;
int id=1;
for(int i=2;i<P.size();++i){
if(id+P[id]-i>0)
P[i]=min(id+P[id]-i,P[2*id-i]);
while((i-P[i]-1)>=0&&i+P[i]+1<ss.size()&&ss[i-P[i]-1]==ss[i+P[i]+1])++P[i];
if(P[i]>P[id])
id=i;
}
string result;
for(int i=(id-P[id]);i<=(id+P[id]);++i){
if(ss[i]!='#')
result+=ss[i];
}
return result;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: