gpt4 book ai didi

javascript - 让功能更加高效

转载 作者:太空宇宙 更新时间:2023-11-04 15:33:39 25 4
gpt4 key购买 nike

我目前正在尝试完成一项有趣的代码挑战。这是场景。

编写函数 scramble(str1,str2),如果可以重新排列 str1 字符的一部分以匹配 str2,则返回 true ,否则返回false

例如:
str1'rkqodlw'str2'world' 输出应返回 true.
str1'cedewaraaossoqqyt'str2'codewars' 应返回 true
str1'katas'str2'steak' 应返回 false

我编写的函数可以工作,但需要很长时间才能执行所有可能的测试。如何使我的功能更加高效?提前致谢。

这是我编写的函数:

function scramble(str1, str2) {
for (var i = 0; i < str1.length; i++) {
str2 = str2.replace(str1.charAt(i),'');
}
return str2.length == 0 ? true : false;
}

最佳答案

我现在要尝试编写代码,但也许不同的方法可以给出有趣的结果。基本上我的想法是:

  • 创建一个空对象
  • 开始循环str2:获取当前字母,是新创建的对象有一个名为“当前字母”的属性,增加该值属性加一,或者向该项目添加属性“当前字母”,值为 1。
  • 现在,对于对象的每个属性,计算 str1 中字母是否具有至少出现与属性值一样多的次数

这是代码:

let lettersCounter = new Object();
for (let i = 0; i < str2.length; i++) {
if (typeof lettersCounter[str2[i]] !== 'undefined'){
lettersCounter[str2[i]] ++;
} else {
lettersCounter[str2[i]] = 1;
}
}
let props = Object.keys(lettersCounter);
for (let i = 0; i < props.length; i ++){
let currLetter = props[i];
if ((str1.split(currLetter).length) <= lettersCounter[currLetter] ){
return false;
}
}
return true;

我认为这里真正的弱点是 str1.split - 使用正则表达式可能会更快 - 但我讨厌编写正则表达式,所以我将把它留给你:)

哦,正如一些评论中所写,您应该进行一些初始化检查,例如 str1 === str2 和 str2.length <= str1.length

关于javascript - 让功能更加高效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44590629/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com