5. Longest Palindromic Substring

2017-11-23  本文已影响0人  larrymusk

/*
*中心扩散法:

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;  
} 
上一篇 下一篇

猜你喜欢

热点阅读