/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param A string字符串 
 * @param n int整型 
 * @return int整型
 */
/****************************************************************
* 双指针中心扩散,设置左指针left和右指针right,分别位于对称中心两侧
* 左右指针向两侧扩散,中心对称点是重复字符则当场一个字符处理
* 例1、abbbba,i指向第1个b时,right指向第2个b,step++了4次指向最后一个a
* 此时left指向第1个a,满足2个while循环,right++后值为6,left--后值为-1
* right-left-1=6-(-1)-1=6,即为回文子串长度
************************************************************/
int getLongestPalindrome(char* A, int n ) {
    // write code here
    int left, right;
    int len = 0;
    int step;
    
    if(n == 0)
        return 0;
    
    for(int i = 0; i < n; i = i+step)
    {
        step = 1;
        left = i-1;
        right = i+1;
        //中心对称点是重复字符则当场一个字符处理
        while(A[right] != '\0' && A[right] == A[i])
        {
            right++;
            step++;
        }
        //核心算法:A[left] == A[right],注意边界条件left >=0和A[right] != '\0'
        while(left >=0 && A[right] != '\0' && A[left] == A[right])
        {
            left--;
            right++;
        }
        //回文串长度即为right-left-1 
        if(right-left-1 > len)
            len = right-left-1;
    }
    
    return len;
}