📜  最长回文 javascript 算法 - Javascript (1)

📅  最后修改于: 2023-12-03 15:26:28.364000             🧑  作者: Mango

最长回文 Javascript 算法 - Javascript

回文是一个从前往后和从后往前读起来一样的字符串。在这个主题里,我们将学习如何在 Javascript 中找到给定字符串中的最长回文。

算法介绍

最长回文算法可以用不同的方法实现。在这里,我们将使用中心扩展算法。该算法的基本思想是从每一个字符开始,向两边扩展,并盲目地比较左右两侧的字符,直到我们找到一个不匹配的字符对为止。

具体步骤如下:

  1. 遍历字符串中的每个字符,以该字符为中心,向两侧扩展,并对左右两侧的字符进行比较,直到找到不匹配的字符对为止。
  2. 记录下每个合法的回文字符串的长度,并与之前遍历过的回文字符串长度进行比较,取最大值。
  3. 返回最长回文字符串的长度。
程序实现

下面是使用中心扩展算法找到字符串中的最长回文的 Javascript 代码:

/**
 * 返回字符串中的最长回文长度
 * @param {string} s
 * @return {number}
 */
function longestPalindrome(s) {
    let maxLength = 0; // 记录最长回文的长度
    let strLength = s.length; // 目标字符串的长度
    let start; // 回文串的起始点

    // 遍历字符串中的每个字符
    for (let i = 0; i < strLength; i++) {
        // 奇数长度中心扩展
        start = i;
        let left = i - 1;
        let right = i + 1;
        while (left >= 0 && right < strLength && s[left] === s[right]) {
            left--;
            right++;
        }
        maxLength = Math.max(maxLength, right - left - 1);

        // 偶数长度中心扩展
        start = i;
        left = i;
        right = i + 1;
        while (left >= 0 && right < strLength && s[left] === s[right]) {
            left--;
            right++;
        }
        maxLength = Math.max(maxLength, right - left - 1);
    }

    return maxLength;
}
程序测试

接下来,我们将使用一些示例字符串测试我们的程序:

// 预期输出: 7
console.log(longestPalindrome("ambekjbcpknofoxofonkpcbjkebma"));

// 预期输出: 3
console.log(longestPalindrome("abc"));

// 预期输出: 1
console.log(longestPalindrome("a"));

// 预期输出: 0
console.log(longestPalindrome(""));
总结

中心扩展算法是发现给定字符串中的最长回文的一种有效方法。通过遍历字符串中的每个字符,我们可以找到从该字符开始的所有合法回文,并找到其中最长的一个。在实现过程中,要注意支持奇数和偶数长度的回文串,并正确处理边界条件。