题目: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.
题解:首先需要清楚什么是“回文“(不知道这个翻译对不对?)字符串!回文字符串关于某一个字符对称,在左右两边与中心相同距离的字符相等。
那么还需要注意的是对称中心可以有多个相同的字符组成,如下图:
所以编程实现时可以先从对称中心入手,从字符串位置0开始作为对称中心依次验证。时间复杂度O(n2);
char* longestPalindrome(char* s) {
int len=strlen(s);
int begin=,maxlen=;
for(int i=;i<len;i++)
{
int left=i,right=i;
while(right<len- && s[right]==s[right+])right++;
while(left> && right<len- && s[left-]==s[right+]){left--;right++;}
if((right-left+)>maxlen)
{
maxlen=right-left+;
begin=left;
}
}
char* s_out=malloc((maxlen+)*sizeof(char));
for(int i=;i<maxlen;i++)
{
s_out[i]=s[begin++];
}
s_out[maxlen]='\0';
return s_out;
}