我正在做这个算法练习,除了这个条件的目的之外,我明白一切:
if (magazineObj[word] < 0) noteIsPossible = false
我找不到任何结果为 -1 的场景
这个条件的目的是什么?
如果第二个参数包含第一个参数中的所有单词,则该算法仅返回。我展示的这段代码是讲师的解决方案。
console.log(solution('aa abc dd', 'aa abc dd aa'))
function solution(noteText, magazineText) {
var noteArr = noteText.split(' ')
var magazineArr = magazineText.split(' ')
var magazineObj = {}
magazineArr.forEach(word => {
if (!magazineObj[word]) magazineObj[word] = 0
magazineObj[word]++
})
var noteIsPossible = true
noteArr.forEach(word => {
if (magazineObj[word]) {
magazineObj[word]--
if (magazineObj[word] < 0) noteIsPossible = false
}
else noteIsPossible = false
})
return noteIsPossible
}
例如:
console.log(solution('aa abc dd', 'aa abc dd aa'))
在上面的例子中,它返回 true。参数2包含参数1中的所有字。
console.log(solution('aa abc dd ee', 'aa abc dd aa'))
在上面的例子中,它返回 false。参数 2 不包含参数 1 中的所有单词。缺少“ee”
console.log(solution('aa abc abc dd', 'aa abc dd'))
在上面的例子中,它返回 false。参数 2 不包含参数 1 中的所有单词。缺少另一个“abc”。参数2中必须包含2个'abc'才能返回true
最佳答案
此函数计算每个“单词”在第一个字符串中出现的次数,结果是一个像这样的对象 { aa: 1, abc: 1, dd: 1 }
。
然后,代码迭代第二个字符串,如果对象中存在单词,则会从数字中删除 1。如果计数器低于 0,则意味着第二个字符串中的单词实例数多于第一个字符串中的单词实例数。
示例:“aa abc dd aa”应生成 - { aa: -1, abc: 0, dd: 0 }
,总体结果将为 false
.
但是,由于这个条件 if (magazineObj[word])
,这实际上不起作用。当 magazineObj[word]
为 0 或 undefined
时,这将被评估为 false
,并且永远不会达到 -1
>.
关于JavaScript 算法 - 比较两个字符串参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59574656/