美文网首页程序员
LeetCode:Longest Palindromic Sub

LeetCode:Longest Palindromic Sub

作者: maskwang520 | 来源:发表于2017-04-09 17:07 被阅读117次

    题目:

    Given a string s, find the longest palindromic substring in s. You may assume that the maximum length of s is 1000.

    Example:
    Input: "babad"
    Output: "bab"

    Note: "aba" is also a valid answer.
    Example:

    Input: "cbbd"

    Output: "bb"

    代码如下:

    #include<stdio.h>
    char* longestPalindrome(char* s) {
       char *start=s;
       int b=0;  //判断有没有至少有一个回文串,否则没有回文,返回首字符
       int maxlength=0,i=0,j=1;
       if(*(s+1)=='\0'){//只有一个字符的时候
         return s;
       }
       while(*(s+i)!='\0'){
         if(*(s+i)==*(s+i+1)){ //针对bb这种形式
              b=1;
              while(i-j>=0&&*(s+i-j)==*(s+i+j+1)){
                   j++;   //往两边拓展的次数
                  }
              if(2*j>maxlength){ //更新最大长度
                maxlength=2*j;   //bb形式的每次往外拓展一层长度是2*j
                start=s+i-j+1;   //记录下最外层的位置,便于返回
              }
            }
            j=1;//记得把j归为原始的1
          if(*(s+i)==*(s+i+2)){   //aba这种形式
            b=1;       
            while(i-j>=0&&*(s+i-j)==*(s+i+2+j)){
                j++;
              }
              if(2*j+1>maxlength){
                maxlength=2*j+1;//aba形式长度为2*j+1;
                start=s+i-j+1;
              }
          }
          i++;
          j=1;
       }
       if(b==0){//整个字符串没有回文
        *(start+1)='\0';
        return start;
       }
       *(start+maxlength)='\0';//这里只需要返回start到 
       return start;          //start+length的长度就可以
       
       
           
    }
    
    int main(){
        char c[1001],*p,*q;
        p=c;
        scanf("%s",p);
        q=longestPalindrome(p);
        printf("%s",q);
        
        
    } 
    

    Note:如果是回文字符串,总共有两种形式:bb型,例如 cbbd这种形式;另外一种就是aba型,例如cabad这种形式。

    ps: i-j>=0,这个条件不能少,否则数组越界啦。我就是少了这个导致double free or corruption (!prev): 0x00000000021bc290 这样的错误

      i++;
      j=1;
    

    }
    if(b==0){//整个字符串没有回文
    *(start+1)='\0';
    return start;
    }
    *(start+maxlength)='\0';//这里只需要返回start到
    return start; //start+length的长度就可以

    }

    int main(){
    char c[1001],p,q;
    p=c;
    scanf("%s",p);
    q=longestPalindrome(p);
    printf("%s",q);

    }

    ### Note:如果是回文字符串,总共有两种形式:bb型,例如    cbbd这种形式;另外一种就是aba型,例如cabad这种形式。  
    #### ps:  i-j>=0,这个条件不能少,否则数组越界啦。我就是少了这个导致double free or corruption (!prev): 0x00000000021bc290 这样的错误

    相关文章

      网友评论

        本文标题:LeetCode:Longest Palindromic Sub

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