最长回文子串(暴力破解)

题目描述

给定一个字符串 s,找到 s 中最长的回文子串。

解题思路

此解题方法为暴力破解,通过找到一个字符,然后分别向两边扩展,直到找到最长的回文子串。

char * longestPalindrome(char * s){
    int length=strlen(s); //字符串长度
    int start=0,len=0;//记录初始位置和子串长度
    /**
    长度为奇数时
    */
    for(int i=0;i<length;++i){
        int left=i-1,right=i+1;
        while(left>=0 && right<length && s[left]==s[right]){
            left--;right++;
        }
        if(right-left-1>len){
            start=left+1;
            len=right-left-1;
        }
    }
    /**
    长度为偶数时
    */
    for(int i=0;i<length;++i){
        int left=i,right=i+1;
        while(left>=0 && right<length && s[left]==s[right]){
            left--;right++;
        }
        if(right-left-1>len){
            start=left+1;
            len=right-left-1;
        }
    }
    s[start+len]='\0';  //
    return s+start;

}

////才发现一个关于字符串的问题,如果一个长度为10的字符串str,例如:“0123456789”,如果将s[5]='\0',再返回s+2,那么这个返回的字符串就会变成“234”

猜你喜欢

转载自www.cnblogs.com/laysfq/p/12930140.html