您的位置:首页 > 其它

【Leetcode】Longest Palindromic Substring

2013-12-15 13:50 375 查看
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)遍历给定字符串s,建立两个指针head和tail,分别从i处开始前后遍历。这里要注意的是不要忽略"ABBA"这种回文数的情况,所以判断时要判断两种情况。第一种是head-1和tail+1是否相等,第二种是head和tail+1是否相等。可能有人会疑问为什么不判断head-1和tail是否相等的情况,原因就是这种情况已经判断过,就是在i-1处时,所以可以避免重复判断。

2)每次判断成功,都要将当前已知的回文串长度和目前的最大长度max相比较,如果大于max,则将max=tail-head;

3)上述循环的终止条件是s[head]!=s[tail]或者head<0,tail>=len(len为s的长度)。

4)将max+1,这才是回文串的长度,最后用string result(s,start,max)构造返回字符串result,这个构造函数的功能是创建一个string对象,然后将其初始化为s中从下标start开始的max个字符的副本。

5)返回结果result。

class Solution {
public:
string longestPalindrome(string s)
{
if(s=="")
return s;
int len=s.size();
int start=0,end=0,max=0;
for(int i=0;i<len;i++)
{
int head=i,tail=i;
while(head>=0&&tail<len)
{
if((head-1)>=0&&(tail+1)<len&&s[head-1]==s[tail+1])
{
head--;
tail++;
}
else if(head==i&&tail+1<len&&s[head]==s[tail+1])
{
tail++;
}
else
break;
if(tail-head>max)
{
start=head;
end=tail;
max=end-start;
}
}
}
max=max+1;
string result(s,start,max);
return result;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息