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"
。
提前致谢!
答案 0 :(得分:2)
问题是本机replace
Javascript函数只替换字符串中的单个匹配项。使用正则表达式来计算字符串中的所有匹配项。
但是,请记住“。”字符在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;
}
}
答案 1 :(得分:1)
问题在于以下几行:
str = str.replace(' ', '');
str = str.replace(',', '');
str = str.replace('.', '');
它确实全局替换所有空格,逗号或点,它只是替换一个空格,逗号和点,如果它在那里。你必须找到所有空格,逗号和点并删除它们。这就是你能做的,
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, '');
}
答案 2 :(得分:0)
除非您想编写自己的代码,否则为什么用户不会反向/加入?
componentDidMount