我希望有人帮助我理解几行代码。有人可以帮我解释一下吗?谢谢

时间:2019-11-02 02:42:08

标签: javascript

我正在使用Codesignal算法。

对于s = "abacabad",输出应为 firstNotRepeatingCharacter(a) = 'c'

字符串中有2个非重复字符:“ c”和“ d”。返回c,因为它首先出现在字符串中。

对于s = "abacabaabacaba",输出应为 firstNotRepeatingCharacter(s) = '_'

此字符串中没有重复的字符。

以下代码:

function firstNotRepeatingCharacter(a) {
  let b = {};
  let len = a.length;
  for (let i = 0; i < len; i++) {
    let tmp = a.charAt(i);
    if (b[tmp]) {
      b[tmp] += 1; //explain here
    }
    else {
      b[tmp] = 1;
    }
  }

  for (var prop in b) {
    if (b[prop] == 1) { //explain here
      return prop;
    }
  }
  return '_';
}

1 个答案:

答案 0 :(得分:1)

实际上,上面的b是一个对象,其键是字符串的不同字母,并且这些键的值是字符串中各个字母的计数。

key => letter
value => Count of that letter

tmp将成为您不断迭代的角色。
if (b[tmp])检查字母是否已经添加到对象中。

  • 如果已经存在,请增加计数。
  • 否则将其设置为一个。

在第二个循环中,if (b[prop] == 1)检查某个字母的计数是否为1。表示它仅在字符串中出现一次,因此返回字母。