js判断回文字符串

106 阅读1分钟

在JavaScript中,判断一个字符串是否为回文字符串是一个常见的编程任务。以下是一些实现这一功能的方法:

方法1:使用双指针

这种方法通过使用两个指针,一个从字符串的开始遍历,另一个从字符串的末尾遍历,直到它们相遇或交叉。

function isPalindrome(s) {
    let left = 0;
    let right = s.length - 1;
 
    while (left < right) {
        if (s[left] !== s[right]) {
            return false;
        }
        left++;
        right--;
    }
    return true;
}

方法2:反转字符串比较

将字符串反转,然后与原字符串进行比较。

function isPalindrome(s) {
    return s === s.split('').reverse().join('');
}

方法3:使用递归

递归方法通过递归地比较字符串的第一个字符和最后一个字符,然后递归地对剩余的子字符串执行相同的操作。

function isPalindrome(s) {
    if (s.length < 2) {
        return true;
    }
    if (s[0] !== s[s.length - 1]) {
        return false;
    }
    return isPalindrome(s.slice(1, s.length - 1));
}

方法4:使用栈结构(非传统但有趣)

使用栈结构,将字符串的字符逐个压入栈中,然后逐个弹出与原字符串的字符进行比较。

function isPalindrome(s) {
    const stack = [];
    for (let char of s) {
        stack.push(char);
    }
    for (let char of s) {
        if (char !== stack.pop()) {
            return false;
        }
    }
    return true;
}

方法5:忽略非字母数字字符和大小写(可选)

如果你想要忽略非字母数字字符以及大小写差异,可以预先处理字符串。

function isPalindrome(s) {
    const cleaned = s.replace(/[^A-Za-z0-9]/g, '').toLowerCase();
    let left = 0;
    let right = cleaned.length - 1;
    while (left < right) {
        if (cleaned[left] !== cleaned[right]) {
            return false;
        }
        left++;
        right--;
    }
    return true;
}

以上方法中,方法1(双指针)通常被认为是最优和最常用的方法,因为它在时间和空间效率上都有良好的表现。其他方法各有特色,可以根据具体需求选择使用。