我正在执行此算法练习,并且我了解此条件的目的以外的所有内容:

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。 parameter2包含parameter1中的所有单词。

 console.log(solution('aa abc dd ee', 'aa abc dd aa'))


在上面的这种情况下,它返回false。 parameter2并不包含parameter1中的所有单词。缺少“ ee”

console.log(solution('aa abc abc dd', 'aa abc dd'))


在上面的这种情况下,它返回false。 parameter2并不包含parameter1中的所有单词。缺少另一个“ abc”。它必须在parameter2中包含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 - JavaScript算法-比较两个字符串参数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59574656/

10-10 10:48