美文网首页
5. Longest Palindromic Substring

5. Longest Palindromic Substring

作者: larrymusk | 来源:发表于2017-11-23 22:59 被阅读0次

/*
*中心扩散法:

  • 如果中心字符串s是回文,那么以中心对称的字符串向左右两边扩展s1,如果左右两边
  • 字符关于中心对称,那么s1也是回文,遍历所有中心点,重复上述过程,找到最长回文
  • 子串。
  • 中心对称分两种情况,奇数个字符以某个字母对称;偶数个字符以中间两个字符对称
  • 时间复杂度:O(n^2) 空间复杂度:O(1)
    http://blog.csdn.net/qustdrjhj/article/details/75427662
    */
void diffusion(char *s,int left,int right,int *sub_start,int *sub_offset)  
{  

    while(left>=0 && s[left] == s[right])  
    {  
        left--;  
        right++;  
    }  
    if(*sub_offset <= ((right-1)-(left+1)))  
    {  
        *sub_offset = (right-left-2);  
        *sub_start = (left+1);  
    }  
}  
char* longestPalindrome(char* s) {  
    int i=0;  
    int sub_start=0;  
    int sub_offset=0;  
    char *new_s=NULL;  
    for(;i<strlen(s);i++)//中心点遍历  
    {  
        diffusion(s,i,i,&sub_start,&sub_offset);//奇数子串  
        diffusion(s,i,i+1,&sub_start,&sub_offset);//偶数子串        
    }  
    new_s = (char*)malloc((sub_offset+2)*sizeof(char));  
    strncpy(new_s,s+sub_start,sub_offset+1);  
    *(new_s+sub_offset+1)='\0';  
    printf("sub_start:%d  sub_offset:%d\n",sub_start,sub_offset);  
    printf("%s\n",s+sub_start);  
    return new_s;  
} 

相关文章

网友评论

      本文标题:5. Longest Palindromic Substring

      本文链接:https://www.haomeiwen.com/subject/itgtbxtx.html