为啥我的代码没有执行正确的答案/回文检查器 javascript
Posted
技术标签:
【中文标题】为啥我的代码没有执行正确的答案/回文检查器 javascript【英文标题】:why my code doesn't execute right answers / palindrome checker javascript为什么我的代码没有执行正确的答案/回文检查器 javascript 【发布时间】:2018-08-07 16:07:44 【问题描述】:function palindrome(word)
var s = new Stack();
for (var i = 0; i < word.length; i++)
s.push(word[i]);
var rword = "";
while (s.length() > 0)
rword += s.pop();
if (word == rword)
return true;
else
return false;
console.log(palindrome('test1'))
console.log(palindrome('manam'))
/* 我正在尝试使用堆栈检查单词是否为回文。但是当我运行我的代码时,它总是返回 false ,即使 word 是回文*/
【问题讨论】:
Stack
是如何定义的?那不是内置的 javascript 类型,那么它是从哪里来的呢?如果您更改为不带括号的var s = []
和s.length
,您的代码将按原样运行。
【参考方案1】:
使用数组作为堆栈。此代码有效:
function palindrome(word)
var s = [];
for (var i = 0; i < word.length; i++)
s.push(word[i]);
var rword = "";
while (s.length > 0)
rword += s.pop();
if (word == rword)
return true;
else
return false;
console.log(palindrome('manam'))
demo 注意:您还在代码中使用了 length() 而不是 length
【讨论】:
【参考方案2】:我添加了一个简单的 Stack 实现,然后 function=palindrome 应该可以按预期工作。
我添加了一个函数 = palindrome1,它是回文判断的简单优化(仅循环一半长度的字符串)。
function Stack()
this.stac=new Array();
this.pop=function()
return this.stac.pop();
;
this.push=function(item)
this.stac.push(item);
;
this.length=function()
return this.stac.length;
;
function palindrome(word)
var s = new Stack();
for (var i=0; i<word.length; i++)
s.push(word[i]);
var rword = "";
while (s.length() > 0)
rword+=s.pop();
if (word == rword)
return true;
else
return false;
console.log(palindrome('test1'))
console.log(palindrome('manam'))
function palindrome1(word)
var maxIndex = word ? word.length:0;
if(!maxIndex || maxIndex==0)
return false;
var index = 0;
var left = "";
var right = "";
while(index<(maxIndex/2))
left += word[index];
right += word[maxIndex-index-1];
index++;
return left==right;
console.log(palindrome1('test1'))
console.log(palindrome1('manam'))
【讨论】:
代码是次要的,第一优先的应该是算法。在编码之前尝试优化算法。 感谢您的建议。我正在做一些在线课程,现在我开始阅读 JS 数据结构和算法书籍,希望它能帮助我理解和编写更好的代码......希望......【参考方案3】:除了已经提到的内容之外,您还可以将回文检查器简化为更小的函数 (es6+)。由于回文数等于它自己的反转,我们可以检查它(我们可以使用内置方法进行反转,而不是自己使用堆栈实现它)。
const palindrome = str => str === str.split("").reverse().join("");
console.log(palindrome("racecar"))
console.log(palindrome("palindrome"))
【讨论】:
这是比我的更优雅的解决方案。内置功能的美丽用法。 在 ES6 中你可以使用扩展运算符将字符串的每个字符放入一个数组中,所以str => str === [...str].reverse().join('')
以上是关于为啥我的代码没有执行正确的答案/回文检查器 javascript的主要内容,如果未能解决你的问题,请参考以下文章