JavaScript对称子字符串最大长度

 之前看的很多算法是实现然后也没管他,现在决定记录我的算法之路

之前看到一篇公众号说了下对称字符串的问题,当然我之前在牛客网页做过这个题,不过我记得当时使用C语言指针来做的,现在我用JavaScript来实现,其实原理和思想都是一样的。

首先定义问题,最长对称字符串,eg:google   =>  goog => 4;就是这么个理。算法这个玩意儿还是先说思想,waiting show the code。

首先,对称的字符串,例如:goog  gobog,都是对称的,但是分为奇数和偶数,首先看奇数:

以gobog为例,当指向b时,我们只需要判断b的前后是否是一样的,也就是i+1 和 i-1是否相等,是相等,则+2,依次判断

偶数时:以goog为例,当指向第一个o时,首先判断 i 和 i+1是否相等,是则继续判断 i-1 和 i+1 的后一个是否相等

代码如下

function max_length(str) {
    var n = 1;
    var j = 0;
    var max = 1; //最大长度
    var len = str.length; //字符串长度
    if (!str || str.length <= 1) //判断字符串是否为空 或长度为1 
        return false;
    for (let i = 1; i <= str.length - 1; i++) {
        n = 1;
        j = 1;
        while ((j <= i) && (i + j <= len) && (str[i - j] == str[i + j])) { //奇数的情况
            n += 2;
            j++
            if (n > max)
                max = n;
        }
        j = 1;
        n = 1;
        while ((j <= i) && (i + j + 1 <= len)) { //偶数的情况
            if ((str[i] == str[i + 1]) && (str[i - j] == str[i + j + 1])) {
                n += 2;
                if (n + 1 > max)
                    max = n + 1;
            }
            j++;
        }
    }
    return max
}

简单粗暴的方法,可以在node的REPL环境下运行

原文地址:https://www.cnblogs.com/duyingxuan/p/6481300.html