Longest Palindromic Substring

题目(Median of Two Sorted Arrays)--Medium

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.


C语言解答

char* longestPalindrome(char* s) {
    int i,m,n,j,p,q;
    char* result;
    int flag = 0;
    int begin = 0;
    int destination=0;
    int length = strlen(s);
    if(length == 0){
        return NULL;
    }
    for(i = 0; i < length; i++){
        m = i;
        n = i;
        while(m>=0 && nflag){
            flag = n - m - 1;
            begin = m + 1;
            destination = n - 1;
        }
        m = i;
        n = i+1;
        while(m>=0 && nflag){
            flag = n - m - 1;
            begin = m + 1;
            destination = n - 1;
        }
    }
    result = (char*)malloc(sizeof(char)*(flag+1));
    for(i = begin,j = 0; j < flag; i++,j++){
        result[j] = s[i];
    }
    result[j] = '\0';
    return result;
}

收获

1. 首先理解题意:找出字符串中最长的回文子串。
2. 我首先想到的是简历两个指针从字符数组的两边同时向中间移动,如果两个指针指向同一个位置或者位置相邻时仍然相等,则说明此子串是回文。但是问题是,这种算法会超时,时间复杂度为O(log(n^3));
3. 看了别人的解答后,才明白,如果以某一个字符为回文子串的中间值向两边扩散,则时间复杂度为O(log(n^2));
4. 要特别注意的是回文既可以是aba形式的,也可以是abba形式的,所以,遍历的时候,要取其长度更大的作为最终结果;
5. 在处理字符数组作为返回值的时候要注意的是把数组最后一位置为'\0',这个是字符数组结束的标志。


你可能感兴趣的:(LeetCode)