这是我用于coderbyte挑战“Palindrome”的代码。如果str是相同的向前和向后(回文),则挑战是返回true。我得到了所有可能的积分,但我知道我的代码有点难看。什么是更有效的编写此代码的方法。看起来我正在重复自己,它似乎可以用for循环编写。我也看到如果没有使用for循环,如果有更长的回文,它真的是假的,它会如何返回true:
function Palindrome(str) {
var low=str.toLowerCase()
var first = low.charAt(0);
var last = low.charAt(low.length-1);
var mid = low.charAt(1);
var mid1 = low.charAt(low.length-2);
if(first===last)
if(mid===mid1)
{
return true
}
else
{
return false
}
else
{
return false
}
}
print(Palindrome(readline()));
答案 0 :(得分:1)
要查看字符串是否为回文,您应该将其与其反转版本进行比较
说hello
这个词不是一个综合症,因为它的反转版本olleh
不等于它。但是单词eye
与单词abba
相同是一个回文,因为它们等同于它们的反转版本。
代码示例:
(function() {
var reverseStr,
isPalindrome,
testStrings;
reverseStr = function(str) {
var chars = [];
for(var i = str.length - 1; i > -1; i--) {
chars.push(str[i]);
}
return chars.join('');
};
isPalindrome = function(str, ignoreCase) {
if(ignoreCase) {
str = str.toLowerCase();
}
return str === reverseStr(str);
};
testStrings = ['abba', 'hello', 'eye'];
for(var i = 0, l = testStrings.length; i < l; i++) {
var word = testStrings[i];
console.log('Word "%s" is %sa palindrome',
word,
isPalindrome(word) ? '' : 'not ');
}
})();
下面列出了另一种可以更快运行的方法。在这里你不会收到一个反向的字符串来比较,但是从字符串的开头和结尾开始走向字符串的中间。
var isPalindrome = function(str, ignoreCase) {
var length,
last,
halfLength,
i;
if(ignoreCase) {
str = str.toLowerCase();
}
length = str.length;
last = length - 1;
halfLength = Math.ceil(length / 2);
for(i = 0; i < halfLength; i++) {
if(str[i] !== str[last - i]) {
return false;
}
}
return true;
};
答案 1 :(得分:1)
function Palindrome(str) {
str = str.toLowerCase();
str = str.split(" ").join("");
return str == str.split("").reverse().join("");
}
这就是我最终的结果。确保字符串全部为小写,因此它不会将可能的真实参数读为false,除去空格,然后根据字符串是否等于它反向返回true / false
答案 2 :(得分:0)
这是一种更简单的方法:
var isPalindrome = function(string) {
string = string.toLowerCase();
if(string.length===0){
return false;
}
for (var i = 0; i < Math.ceil(string.length/2); i++) {
var j = string.length-1-i;
var character1 = string.charAt(i);
var character2 = string.charAt(j);
if (character1 !== character2) {
return false;
}
}
return true;
};
答案 3 :(得分:0)
我偶然发现了这个回文编码挑战,您必须替换所有非字母数字字符(标点符号,空格和符号),当然还要将字符串更改为小写。这是我的解决方案。
function palindrome(str) {
var low = str.toLowerCase();
var filteredStr = low.replace(/[^0-9a-z]/gi, "");
var split = filteredStr.split("");
var backward = split.reverse();
var join = backward.join("");
if (filteredStr === join) {
return true;
} else {
return false;
}
}
如果您关心代码行数,这里的代码较小
function palindrome(str) {
var low = str.toLowerCase();
var filteredStr = low.replace(/[^0-9a-z]/gi, "");
var backward = filteredStr.split("").reverse().join("");
if (filteredStr === backward) {
return true;
} else {
return false;
}
}
代码是初学友好和自我解释,但如果您对代码有任何疑问,请随时提问;)