调试回文函数 JavaScript
Debugging JavaScript for Palindrome Function
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"
。
提前致谢!
问题是因为以下几行:
str = str.replace(' ', '');
str = str.replace(',', '');
str = str.replace('.', '');
它确实会在全局范围内替换所有白色 space、逗号或点,如果存在的话,它只会替换一个 space、逗号和点。您必须找到所有 space、逗号和点并将它们删除。这就是你能做的,
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, '');
}
除非您想编写自己的代码,否则为什么不使用用户 reverse/join?
function palindrome(str)
{
str = str.split(' ').join('');
str = str.split(',').join('');
str = str.split('.').join('');
str = str.toLowerCase();
if (str.split('').reverse().join('') == str)
{
return true;
}
else
{
return false;
}
}
palindrome("never odd or even");
问题在于本机 replace
Javascript 函数仅替换字符串中的单个事件。使用 Regex 计算字符串中的所有匹配项。
但是,请记住“.”字符在 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;
}
}
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"
。
提前致谢!
问题是因为以下几行:
str = str.replace(' ', '');
str = str.replace(',', '');
str = str.replace('.', '');
它确实会在全局范围内替换所有白色 space、逗号或点,如果存在的话,它只会替换一个 space、逗号和点。您必须找到所有 space、逗号和点并将它们删除。这就是你能做的,
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, '');
}
除非您想编写自己的代码,否则为什么不使用用户 reverse/join?
function palindrome(str)
{
str = str.split(' ').join('');
str = str.split(',').join('');
str = str.split('.').join('');
str = str.toLowerCase();
if (str.split('').reverse().join('') == str)
{
return true;
}
else
{
return false;
}
}
palindrome("never odd or even");
问题在于本机 replace
Javascript 函数仅替换字符串中的单个事件。使用 Regex 计算字符串中的所有匹配项。
但是,请记住“.”字符在 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;
}
}