代码之家  ›  专栏  ›  技术社区  ›  BeckiD

采访javascript foreach

  •  0
  • BeckiD  · 技术社区  · 8 年前

    Q: 编写一个名为countLetters的函数,该函数接受一个字符串,并根据字母在字符串中出现的次数返回值。 嗨,有没有更有效的方法来解决这个问题?

    O(n)解决方案,如何使其成为O(log n)

    function countLetters(str){
        var splitArr = str.toLowerCase().split("");
        var obj = {};
        var letters = "abcdefghijklmnopqrstuvwxez";
      
        splitArr.forEach((letter)=>{
            if(letters.includes(letter)){
                if(letter in obj){
                    obj[letter]++;
                } else{
                    obj[letter] = 1;
                   
                }
            }
        });
        return obj;
    }
    console.log(countLetters('Ellie'))
    1 回复  |  直到 8 年前
        1
  •  0
  •   fubar    8 年前

    这不是 O(log n) 因为考虑到眼前的问题,这是不可能实现的。然而,我确实认为这是一个更简洁的问题解决方案。

    function countLetters(str){
      var letters = str.toLowerCase().replace(/[^a-z]/g, '').split('');
      
      return letters.reduce(function (counts, letter) {
        counts[letter] = (counts[letter] || 0) + 1;
        return counts;
      }, {});
    }
    
    console.log(countLetters('Hello World!'));