微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Scrambles:需要用大字符串codewars加快这段代码的速度

如何解决Scrambles:需要用大字符串codewars加快这段代码的速度

任务:

完成函数 scramble(str1,str2),如果 a str1 字符的一部分可以重新排列以匹配 str2,否则 返回错误

注意事项:

仅使用小写字母 (a-z)。没有标点符号或数字 将被包括在内。性能需要考虑

我的代码可以很好地处理短字符串,但是当我尝试尝试时 - 我在长字符串上遇到错误 Execution Timed Out (12000 ms)

发生这种情况是因为过滤,但我不知道使用什么。

我的代码

function scramble(str1,str2) {
  str1 = str1 + '1'
  return str2 == [...str2].filter((v) => str1.includes(v) && (str1 = str1.replace(v,'')) ).join('')
}

console.log(scramble('rkqodlw','world')) // true
console.log(scramble('katas','steak')) //false
console.log(scramble('scriptsjava','javascripts')) //true
console.log(scramble('aabbcamaomsccdd','commas')) // true
console.log(scramble('jscripts','javascript')) //false
console.log(scramble('scriptingjava','javascript'))// true

但我不知道在那里使用什么字符串来测试(多长时间)。

任何想法如何提高此代码的执行速度?我应该使用reduce而不是filter吗?

已更新(此代码更快但不那么可爱)

function scramble(str1,str2) {
    var array1 = str1.split("").sort();
    var array2 = str2.split("").sort();
    var i = 0;
    for(var x = 0; i<array2.length && x<=array1.length; x++) {
        if(array2[i] === array1[x]) {
            i++;
        }
    }
    return (x <= array1.length);
}
console.log(scramble('rkqodlw','javascript'))// true

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。