字谜算法问题的替代解决方案
Posted
技术标签:
【中文标题】字谜算法问题的替代解决方案【英文标题】:alternative solution to anagram algo question 【发布时间】:2021-02-01 19:36:43 【问题描述】:我已将我正在解决的练习题粘贴为下面的照片。我有一个正确的答案,但我尝试将其切换,但我不确定为什么替代答案不起作用。希望有任何解释,谢谢!
我的解决方案有效
var string1 = "somethingb"
var string2 = "omesnigthr"
function validAn(string1,string2)
let obj1 =
let obj2 =
if (string1.length !== string2.length)
return false
for(let char of string1)
obj1[char]= (obj1[char] || 0) + 1
for(let char of string2)
obj2[char]= (obj2[char] || 0) + 1
for(var val in obj1)
if(!(val in obj2))
return false
if(obj2[val] !== obj1[val])
return false
return true
我的解决方案不起作用
var string1 = "somethingb"
var string2 = "omesnigthr"
function validAn(string1,string2)
let obj1 =
let obj2 =
if (string1.length !== string2.length)
return false
for(let char of string1)
obj1[char]= (obj1[char] || 0) + 1
for(let char of string2)
obj2[char]= (obj2[char] || 0) + 1
for(var val in obj1)
if(val in obj2) && (obj2[val] == obj1[val]))
return true
return true
【问题讨论】:
最后一个for循环中的==
应该是!=
。
最后一个 if 语句应该有一个else return false
。
您是否尝试调试代码?手动跟踪一个简单的例子(例如validAn("a", "b")
),看看会发生什么以及为什么它返回true。
【参考方案1】:
在第二个不起作用的解决方案中,您总是返回 true。在第三个 for 循环中,您应该检查两个对象是否具有相同值的键,如果没有则返回 false:
var string1 = "somethingb"
var string2 = "omesnigthr"
function validAn(string1,string2)
let obj1 =
let obj2 =
if (string1.length !== string2.length)
return false
for(let char of string1)
obj1[char]= (obj1[char] || 0) + 1
for(let char of string2)
obj2[char]= (obj2[char] || 0) + 1
for(var val in obj1)
if(!(val in obj2) || (obj2[val] !== obj1[val]))
return false
return true
console.log(validAn(string1, string2));
【讨论】:
以上是关于字谜算法问题的替代解决方案的主要内容,如果未能解决你的问题,请参考以下文章