【问题标题】:Understanding solution of Valid Palindrome in Javascript理解 Javascript 中有效回文的解决方案
【发布时间】:2019-11-20 18:37:46
【问题描述】:

这是来自 LeetCode - 有效回文。

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

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

  1. while (regex.test(s[start])) { 开始++;} --> 看不懂是怎么回事,我只知道 s[start] 是字母数字字符,会是假的

  2. 如果 (!s[开始] || !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;
};

请指教!

【问题讨论】:

  • 理解这段(或任何)代码的一个好方法是单步执行。既然你有代码,你可以把它弹出到调试器中并测试它。
  • 这些语句上方的 cmets 准确地解释了它们的作用。

标签: javascript string palindrome


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-03
      • 2021-05-06
      • 1970-01-01
      • 2015-09-12
      • 2019-06-30
      • 1970-01-01
      • 1970-01-01
      • 2012-10-20
      相关资源
      最近更新 更多