5. Longest Palindromic Substring

来源:互联网 发布:windows消息机制是啥 编辑:程序博客网 时间:2024/06/15 18:12


题目: Longest Palindromic Substring

Given a string S, find the longest palindromic substring inS. You may assume that the maximum length of S is 1000, and there exists one unique longest palindromic substring.


假设给定字符串“abcbe”

1. 把字符串转换成“#a#b#c#b#e#”。

2. 然后从下标0开始依次以字符串中的字符为中心,依次以step为1进行对称对比,如果相等就继续step++;不相等,跳出此中心点的计算,判断是否为最长回文串。

3. 直到所有字符遍历完毕。


时间复杂度是O(N2),空间是O(n)。


char* longestPalindrome(char* s) {    int i=0,j=0,maxLen=0;    int length=2*strlen(s)+1;    //用时间复杂度是o(N)的方法    printf("The length is %d\n",strlen(s));        char* extendArray=(char *)malloc(sizeof(char)*(length+1));    char* largest=NULL;        //进行处理,没个字符和收尾都加上‘#’    while(s[i]!='\0')    {        if(j%2==0)        {            extendArray[j]='#'; //在每个字符的前面加上‘#’            j++;        }        else        {            extendArray[j]=s[i];            j++;            i++;        }    }    //给最后一个字符加上‘#’    extendArray[length-1]='#';    extendArray[length]='\0';    int p=0;    while(extendArray[p]!='\0')    {        printf("%c",extendArray[p++]);    }        int left=0,right=0;    int L=0,R=0;//左右边界    for(i=0;i<length;i++)    {        int center=i;                int step=0;        L=center-step;        R=center+step;        while(L>=0 && R <length)        {            if(extendArray[L] != extendArray[R] )            {                break;            }            else            {                step++;                L=center-step;                R=center+step;            }        }                            if(maxLen < step-1)            {                maxLen=step-1;                left=L+1;                right=R-1;            }                    }        largest=(char *)malloc(sizeof(char)*(right-left+2));    i=0;    for(int k=left;k<=right;k++)    {        if(extendArray[k]!='#')        {            largest[i++]=extendArray[k];        }    }        largest[i]='\0';        return largest;    }





0 0
原创粉丝点击