理解Javascript中有效回文的解决方案

理解Javascript中有效回文的解决方案,javascript,string,palindrome,Javascript,String,Palindrome,这是来自LeetCode的有效回文 给定一个字符串,确定它是否是回文,只考虑字母数字字符,忽略大小写 注意:为了解决这个问题,我们将空字符串定义为有效回文 而正则表达式测试[开始]{ 开始+++;} ->无法理解它是如何工作的,我只知道s[start]是字母数字字符,它将是错误的 如果!s[开始]| |!(完) ->这是什么意思 下面是整个代码 var isPalindrome = function(s) { let regex = /[\W]/; let start = 0;

这是来自LeetCode的有效回文

给定一个字符串,确定它是否是回文,只考虑字母数字字符,忽略大小写

注意:为了解决这个问题,我们将空字符串定义为有效回文

而正则表达式测试[开始]{ 开始+++;} ->无法理解它是如何工作的,我只知道s[start]是字母数字字符,它将是错误的

如果!s[开始]| |!(完) ->这是什么意思

下面是整个代码

var isPalindrome = function(s) {
    let regex = /[\W]/;
    let start = 0;
    let end = s.length - 1;
    while (start < end) {
        // Moves front runner to next alphanumeric
        while (regex.test(s[start])) {
            start++;
        }
        // Moves back runner to next alphanumeric
        while (regex.test(s[end])) {
            end--;
        }
        // Above would run until null if there are no alphanumeric characters so return true
        if (!s[start] || !s[end]) {
            return true;
        }
        // Check if equal and return false if not
        if (s[start].toLowerCase() != s[end].toLowerCase()) {
            return false;
        }
        // If index values match continue the while loop
        start++;
        end--;
    }
    return true;
};

请告知

这是严重的过度设计。为什么不使用一个for循环和两个计数器,一个从0开始,另一个在最后一个索引处,当它们不相等时,检查这些索引处的字符是否相同。或者使用内置函数,如

function palindrome(str){ return str.split('').reverse().join('') == str}

与以前的解决方案相同,另外: +删除空格和符号(A-Z、A-Z、0-9除外) +小写

const isPalindrome = function(str) {
  const expr = /[\W_]/g;
  const lowcaseStr = str.toLowerCase().replace(expr, '');
  const reverseStr = lowcaseStr.split('').reverse().join('');
  return lowcaseStr === reverseStr
};

理解此代码或任何代码的一个好方法是逐步完成它。既然你有了代码,你就可以将它弹出到调试器中并进行测试。上面的每个语句的注释都准确地解释了它们的作用。