查找回文子串
中心拓展法
中心拓展法是根据回文的特点,因为回文顺着读和反过来读是一摸一样的,所有可以理解为左半边和右半边是一模一样的,可以通过中心位置确定两边的字符是否相等,类似一个洋葱,但是不是从外往外边剥,而是从里往外剥。具体算法如下:
var countSubstrings = function(s) {
let len = s.length;
if (len < 2) return len;// 一个字符只有一个回文,就不用去使用中心查找法了
let result = 0;
const centerSpread = function (str, left, right) {
// 每一次l和r都是一样的。在首次的时候一个字符串他是一个回文,所有
// l向左边拓展,r向右边拓展,判断拓展后的字符是否相等,相等则这两个字符加上中心字符就是回文了。
// 如果不相等,就不是回文了,不用继续拓展了。直接返回就可以了。
let len = str.length;
let i = left;
let j = right;
while (i >= 0 && j < len) {
if (str.charAt(i) === str.charAt(j)) {
result++;
i--;
j++;
} else {
break;
} } };
for (let i = 0; i < len; i++) {
centerSpread(s, i, i);// 中心拓展法查找回文中心为一个字符的情况
centerSpread(s, i, i + 1);// 判断相邻的两个字符是不是回文,中心为两个字符的情况 }
return result;};