题解 | #NC17-最长回文子串#

最长回文子串

http://www.nowcoder.com/practice/b4525d1d84934cf280439aeecc36f4af

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @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;
}
全部评论

相关推荐

程序员牛肉:主要是因为小厂的资金本来就很吃紧,所以更喜欢有实习经历的同学。来了就能上手。 而大厂因为钱多,实习生一天三四百的就不算事。所以愿意培养你,在面试的时候也就不在乎你有没有实习(除非是同级别大厂的实习。) 按照你的简历来看,同质化太严重了。项目也很烂大街。 要么换项目,要么考研。 你现在选择工作的话,前景不是很好了。
点赞 评论 收藏
分享
评论
2
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务