javascript - 为什么我的 JavaScript 对于这个 Scramblies 任务来说太慢了?

标签 javascript

我正在尝试解决以下任务:

Complete the function scramble(str1, str2) that returns true if a portion of str1 characters can be rearranged to match str2, otherwise returns false.

我编写的代码通过了初始测试,但在最终尝试时失败并出现以下错误:“执行超时(12000 毫秒)”。 这里有什么问题?

function scramble(str1, str2) {
   
let array1 = str1.split("").sort(); 
let array2 = str2.split("").sort();
let count = 0;
 
for(let a = 0; a <= array1.length && count < array2.length; a++) {
    if(array2[count] === array1[a]){
      count++;  
      }
  }
  
return (count === array2.length);
}

最佳答案

你的代码没有问题,只是速度太慢,无法通过上次测试。

代码中最慢的部分是排序。通过创建一个对象,该对象在一个字符键下具有该字符的数量(例如,“Hello world”变为 {"H": 1, "e": 1, "l": 3, "w": 1, "o": 2, "r": 1, "d": 1}。您可以使用这个“单行”函数在 O(n) 中做到这一点:

function getCharFrequencies(str) {
    return str.split("").reduce(
        function(container, char) {
            (container[char] += 1) || (container[char] = 1);
            return container;
        }, 
    {});
}

然后,您可以将每个字符串传递给该函数,并将 str2 中的所有字符频率与 str1 中的所有字符频率进行比较,以查看是否可以使 str2 来自 str1

关于javascript - 为什么我的 JavaScript 对于这个 Scramblies 任务来说太慢了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52358645/

相关文章:

javascript - "Best fit"字体大小 - 如何测量句子宽度?

javascript - 元组与硬编码字符串

php - 发送的消息被 chop 为接收到的数据的大小

javascript - 令人惊讶的实例化模式 - 在包装函数上使用新关键字

javascript - javascript 开发者的最佳 ide - dojo 是我的目标

javascript - 无法更改音频源

javascript - Google 日历错误地从 .ics 文件导入事件

javascript - 我正在制作一个图像 slider ,但只有第一张图像显示它不显示其余图像

javascript - 使用nodejs和java异步获取MQTT数据

javascript - 使用 localStorage 中的存储值加载 Knockout Observable