回文是指一个字符串不论从左往右看还是从右往左看都是一样的
那么就会有两种状况:1.复数回文,2.单数回文
双指针解法
利用两个指针,指针内的字符串就是匹配到的回文字符串
function longestPalindrome(str) { // 最终后果 let result = ""; for (let index = 0; index < str.length; index++) { // 回文核心是复数(本人)时,即复数回文 findRepeat(index, index); // 回文核心是单数时,即单数回文 findRepeat(index, index + 1); } // 匹配传入指针对应的最大回文字符串 function findRepeat(leftIndex, rightIndex) { while ( leftIndex >= 0 && rightIndex < str.length && str[rightIndex] === str[leftIndex] ) { leftIndex--; rightIndex++; } // 这里要留神:下面的 while 循环会在条件不成立时终止,所以 leftIndex 的最终值 多减了 1, rightIndex 的最终值 多加了 1 // slice 左闭右开的个性, leftIndex 又多减了1 所以 leftIndex 要 + 1解决,rightIndex 要 - 1解决,而 rightIndex 自身就多加了 1 所以互相对消 const replaceStr = str.slice(leftIndex + 1, rightIndex); if (result.length < replaceStr.length) { result = replaceStr; } } return result;}
本文由一文多发经营工具平台 EaseWriting 公布