繁体   English   中英

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

[英]Understanding solution of Valid Palindrome in Javascript

这是来自 LeetCode - 有效回文。

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

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

  1. while (regex.test(s[start])) { start++;} --> 无法理解它是如何工作的,我只知道 s[start] 是字母数字字符,它将是错误的

  2. if (?s[start] || !s[end]) --> 这是什么意思?

下面是整个代码

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;
};

请指教!

与之前的解决方案相同,加上:+ 删除空格和符号,除了 (AZ,az,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
};

这是严重过度设计的。 为什么不只使用一个带有 2 个计数器的 for 循环,一个从 0 开始,一个在最后一个索引处,虽然它们不相等,但检查这些索引处的字符是否相同。 或使用内置函数,如

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM