回文是指一个字符串不管从左往右看还是从右往左看都是一样的 那么就会有两种情况: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 发布