为Palindrome函数调试JavaScript

时间:2015-11-25 18:20:00

标签: javascript loops debugging palindrome

function palindrome(str) {
  str = str.replace(' ', '');
  str = str.replace(',', '');
  str = str.replace('.', '');
  str = str.toLowerCase();
  if (str.length % 2 === 0) {
    var x = 0;
    while (x < (str.length - x)) {
        if (str.charAt(x) === str.charAt((str.length - x) - 1)) {
          x++;
        } else {
          return false;
        }
   }
   return true; 
  } else {
    var y = 0;
    while (y < (str.length - y - 1)) {
      if (str.charAt(y) === str.charAt((str.length - y) - 1)) {
          y++;
        } else {
          return false;
        }
   }
   return true;
   }
}

palindrome("eye");

这可能不是解决这个问题最有效的方法,但我首先删除多余的字符,然后使用if/else来分割偶数和奇数字符串长度。在每一个中,我只检查字符中间的字符相等 - 从过去那将是重复的。

但是,经过多次更改并查看问题的其他解决方案后,我仍然无法通过特定案例:palindrome("never odd or even")

如果有帮助,则会传递"race car""almostomla"以及"eye"

提前致谢!

3 个答案:

答案 0 :(得分:2)

问题是本机replace Javascript函数只替换字符串中的单个匹配项。使用正则表达式来计算字符串中的所有匹配项。

但是,请记住“。”字符在Regex中用作通配符,因此您需要使用反斜杠转义它以告诉Regex您是否专门寻找“。”。字符。以JSFiddle为例:https://jsfiddle.net/on333yf9/3/

function palindrome(str) {
  str = str.replace(/ /g, '');
  str = str.replace(/,/g, '');
  str = str.replace(/\./g, '');
  str = str.toLowerCase();
  if (str.length % 2 === 0) {
    var x = 0;
    while (x < (str.length - x)) {
        if (str.charAt(x) === str.charAt((str.length - x) - 1)) {
          x++;
        } else {
          return false;
        }
   }
   return true; 
  } else {
    var y = 0;
    while (y < (str.length - y - 1)) {
      if (str.charAt(y) === str.charAt((str.length - y) - 1)) {
          y++;
        } else {
          return false;
        }
   }
   return true;
   }
}

答案 1 :(得分:1)

问题在于以下几行:

str = str.replace(' ', '');
str = str.replace(',', '');
str = str.replace('.', '');

它确实全局替换所有空格,逗号或点,它只是替换一个空格,逗号和点,如果它在那里。你必须找到所有空格,逗号和点并删除它们。这就是你能做的,

str = str.replace(/ /g, '');
str = str.replace(/,/g, '');
str = str.replace(/./g, '');

g 字符表示在整个字符串中重复搜索。阅读此内容以及JavaScript here中提供的其他RegEx修饰符。

<强>编辑:

您可以这样做:

if(str.replace(/ /g, '').length != 0){
    str = str.replace(/ /g, '');
}
if(str.replace(/,/g, '').length != 0){
    str = str.replace(/,/g, '');
}
if(str.replace(/\./g, '').length != 0){
    str = str.replace(/\./g, '');
}

答案 2 :(得分:0)

除非您想编写自己的代码,否则为什么用户不会反向/加入?

componentDidMount