【问题标题】: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。

标签: javascript algorithm counter anagram


【解决方案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));

【讨论】:

    猜你喜欢
    • 2023-03-13
    • 1970-01-01
    • 2020-05-14
    • 2019-11-10
    • 2020-09-10
    • 2011-05-28
    • 1970-01-01
    • 2016-11-08
    • 1970-01-01
    相关资源
    最近更新 更多