leetcode 5. 最长回文子串

void check(char *s,int len,int l,int r,int* start,int* maxlen){
    while(l>-1&&r<len&&s[l]==s[r]) l--,r++;
    int len0=r-l-1;
    if(len0>*maxlen){
        *maxlen=len0;
        *start=l+1;
    }
}
char* longestPalindrome(char* s) {
    int len=strlen(s);
    if(len<2) return s;
    int start=0;
    int maxlen=0;
    for(int i=0;i<len-1&&len-i>maxlen/2;i++){
        check(s,len,i,i,&start,&maxlen);
        check(s,len,i,i+1,&start,&maxlen);
    }
    char* t=(char*)malloc(sizeof(char)*(maxlen+1));
    memcpy(t,s+start,sizeof(char)*maxlen);
    t[maxlen]='\0';
    return t;
    
}

check从里面开始扩散,看字串是否是回文串,直到扩散到最大就是最长回文子串

O(n2)的时间复杂度,速度还可以

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页