首先单独设置计算回文子串长度的函数。从中间向外围扩散找到左右不等时的边界就可求出回文子串的长度。
以A[0]为起点找回文串,直到A[len-2],共检查len-1次。
每次从A[i]开始是否存在回文子串时,分别判断奇数形式aba和偶数形式abba是否存在,取二者的大者为本轮找到的最大回文子串长度max。
用一个maxlen维护最大回文子串长度,并在一轮结束后确定是否更新。
外循环全部结束后返回。
int son(char* S, int left, int right){
    while(left >= 0 && right < strlen(S)){  //left不过左界0,right不过右界len-1
        if(S[left] == S[right]){  //左右相等时才同时向左向右移动下标
            left--;
            right++;
        }
        else    //左右不等时跳出while循环,结束查找,计算长度
            break;
    }
    return right - left + 1 - 2; //用下标计算长度要-1,而最后左右边界不计入回文子串长度
}
int getLongestPalindrome(char* A ) {
    int len = strlen(A);
    int maxlen = 0;   //记录最大回文子串长度
    if(len < 2)  //0个元素,没有回文;1个元素,自己就是回文
      return len;
    for(int i = 0; i < len-1; i++){  //i最大为len-2,因为i+1最大为len-1
        int n = max(son(A, i, i), son(A, i, i+1));   //用n记录此轮找到的最大长度,也许并不是最终的最大长度
        maxlen = max(maxlen, n);  //这个才是要求的最大长度
    }
    return maxlen;
}