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;
}
};