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环境下运行