在Javascript中计算一个单词并返回它是否是对称的

时间:2015-06-16 20:26:03

标签: javascript counting

我的整个目标是编写一个循环,它将取一个字符串,计算字母并返回两个响应:一个=“这个单词是对称的”或两个=“这个单词不对称”。但是我写的代码没有控制任何东西。这是代码:

onOptionsItemSelected

1 个答案:

答案 0 :(得分:0)

有很多方法可以实现您的目标,但这里有一些。第一种是使用for循环的有点天真的方法,第二种是使用递归。第三个询问字符串是否等于字符串的反向。

迭代(for循环)函数

var isPalindromeIteratively = function(string) {
  if (string.length <= 1) {
    return true;
  }
  for (var i = 0; i <= Math.floor(string.length / 2); i++) {
    if (string[i] !== string[string.length - 1 - i]) {
      return false;
    }
  }
  return true;
};

此函数首先询问输入字符串是单个字符还是空字符串,在这种情况下,字符串将是一个简单的回文结构。然后,设置for循环:从0开始(字符串的第一个字符)并转到中间字符,循环询问给定字符是否与字符串另一端的伙伴相同。如果parter字符不相同,则函数返回false。如果for循环结束,则表示每个字符都有相同的伙伴,因此该函数返回true

递归函数

var isPalindromeRecursively = function(string) {
  if (string.length <= 1) {
    console.log('<= 1');
    return true;
  }
  var firstChar = string[0];
  var lastChar = string[string.length - 1];
  var substring = string.substring(1, string.length - 1);
  console.log('first character: ' + firstChar);
  console.log('last character: ' + lastChar);
  console.log('substring: ' + substring);
  return (firstChar === lastChar) ? isPalindromeRecursively(substring) : false;
};

此功能以与第一种方式相同的方式开始,方法是将琐碎的情况放在一边。然后,它测试字符串的第一个字符是否等于最后一个字符。如果该测试失败,则使用函数ternary operator返回false。如果测试为真,则该函数在子字符串上再次调用自身,并且所有内容都重新开始。此substring是没有第一个和最后一个字符的原始字符串。

'反映'字符串

var reflectivePalindrome = function(string) {
  return string === string.split('').reverse().join('');
};

这个只是反转字符串并查看它是否等于输入字符串。它依赖于Array的{​​{3}}方法,虽然它是最具表现力和最紧凑的方式,但它可能效率最高。

使用

这些将返回true或false,告诉你string是否是回文。当你说“对称”时,我认为这就是你的意思。我包含了一些调试语句,因此您可以跟踪这个递归函数。

Mozilla开发者网络提供reverse() JavaScript语言。此外,这里还有指向comprehensive guidefor loops在JS中的工作方式的链接。