我的整个目标是编写一个循环,它将取一个字符串,计算字母并返回两个响应:一个=“这个单词是对称的”或两个=“这个单词不对称”。但是我写的代码没有控制任何东西。这是代码:
onOptionsItemSelected
答案 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 guide和for
loops在JS中的工作方式的链接。