我正在尝试将原始字符串参数与其反向进行比较。本质上,该函数应该验证给定的字符串是否是回文。要点:
以下是源代码:JS Fiddle |或者,代码如下:
function palindrome(str) {
var reverseString;
var temp;
var formatted;
// make sure input gets converted to lowercase
temp = str.toLowerCase();
// make sure all non-alphanumeric characters get removed
// once converted to lowercase, ensure that all special characters and digits are stripped from the string
formatted = temp.replace(/[^A-Za-z]/g, '');
// now we need to compare two strings: the raw input vs the string in reverse
for (i = formatted.length -1; i >= 0; i--) {
reverseString += formatted[i];
}
if (reverseString === str) {
return true;
}
return false;
}
palindrome("123$EYE");
答案 0 :(得分:1)
为什么反向和比较?你只需要比较头部和尾部相同位置的字符。首先是str[0]
和str[length - 1]
,然后是str[1]
和str[length - 2]
,依此类推。直到中间,或任何比较失败。
function isPalindrome(str) {
var len = str.length
for (var i = 0; i < Math.ceil(len/2); i++) {
if (str[i] !== str[len - 1 - i]) {
// or add more comparison rules here
return false
}
}
return true
}
isPalindrome('1') // true
isPalindrome('121') // true
isPalindrome('1221') // true
isPalindrome('1211') // false
答案 1 :(得分:1)
function palindrome(str) {
var reverseString=""; // initialize every string to ""
var temp="";
var formatted="";
temp = str.toLowerCase();
formatted = temp.replace(/[^A-Za-z0-9]/g, ''); // I added 0-9 in your regex to have numbers in your string
for (i = formatted.length -1; i >= 0; i--) {
reverseString += formatted[i];
}
if (reverseString === formatted) { // change str to formatted
return true;
}
return false;
}
var isPal = palindrome("123$EYE");
alert(isPal); // try it on `alert` if it is true or false
您的代码没问题。但是你有一些缺陷。您应该将String
初始化为""
,以使其价值不会为undefined
。您放在if statement
上的那个是str
,这是您原来的字符串字,您应该放置formatted
字符串,因为这是您删除特殊字符的字符串。
答案 2 :(得分:1)
字母数字字符?
function palindrome(str) {
var temp;
temp = str.toLowerCase();
temp = temp.replace(/[^A-Za-z0-9]/g, '');
console.log(temp);
for (let a = 0, b = temp.length - 1; b > a; a++, b--) {
if (temp.charAt(a) !== temp.charAt(b))
return false;
}
return true;
}
答案 3 :(得分:0)
您没有初始化reverseString
所以它在开头就是undefined
。将字符'a'
添加到undefined
会返回字符串'undefineda'
,而不是您可能期望的'a'
。
将您的代码更改为
var reverseString = '';
它会工作
答案 4 :(得分:0)
这是扭转文本的优雅方式:
var rev = temp.split('').reverse().join(''); // reverse
查看小提琴:
function palindrome(str)
{
var temp = str.toLowerCase() // converted to lowercase
.replace(/[^A-Za-z]/g, ''); // non-alphanumeric characters removed
var rev = temp.split('').reverse().join(''); // reverse
console.log(temp, ' === ', rev, ' is ', temp === rev);
if(temp === rev)
{
return true;
}
return false;
}
var out = palindrome("123$EYE");
document.getElementById('divOutput').innerHTML = out;
&#13;
<div id="divOutput"></div>
&#13;