字谜算法问题的替代解决方案

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));

【讨论】:

以上是关于字谜算法问题的替代解决方案的主要内容,如果未能解决你的问题,请参考以下文章

优化子串字谜比较算法

PHP中的字谜算法

字谜字符串编辑距离算法/代码?

重复排列 - 非字谜算法

查找字谜的算法 Objective-C

查找单词字谜数量的算法?