Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 优化确定是否可以重新排列字符串的子集以形成另一个字符串_Javascript_Algorithm - Fatal编程技术网

Javascript 优化确定是否可以重新排列字符串的子集以形成另一个字符串

Javascript 优化确定是否可以重新排列字符串的子集以形成另一个字符串,javascript,algorithm,Javascript,Algorithm,完成函数scramble(str1,str2),如果部分str1字符可以重新排列以匹配str2,则返回true,否则返回false 注: 仅使用小写字母(a-z)。不包括标点符号或数字 需要考虑性能 输入字符串s1和s2以null结尾 例子 'rkqodlw', 'world' ==> True 'katas', 'steak' ==> False 我的代码: function scramble(str1, str2) { let str = ''; for (i =

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

注:

  • 仅使用小写字母(a-z)。不包括标点符号或数字
  • 需要考虑性能
  • 输入字符串
    s1
    s2
    以null结尾
例子

'rkqodlw', 'world' ==> True
'katas', 'steak' ==> False
我的代码:

function scramble(str1, str2) {
  let str = '';

  for (i = 0; i < str2.length; i++) {
    if (str1.includes(str2[i])) {
      str1 = str1.replace(str2[i], '')
      str += str2[i]
    }
    if (str === str2) return true
  }
  return false
}
功能加扰(str1、str2){
设str='';
对于(i=0;i
如果字符串太大,以至于运行时确实存在问题,那么可以先将其中一个字符串分组到一个对象中,这样总体复杂度是
O(n)
而不是
O(n^2)

功能加扰(str1、str2){
const grouped={};
for(str1的常量字符){
分组[char]=(分组[char]| | 0)+1;
}
for(str2的常量字符){
如果(!grouped[char])返回false;
分组[char]-;
}
返回true;
}
log(扰码('rkqodlw','world');

console.log(加扰('katas','steak')通过为每个单词制作一个频率计数器,可以在线性时间内完成此操作。如果,对于str2中的每个唯一字符,您发现其字母计数为
[…s]。reduce((a,e)=>{
a[e]=++a[e]| | 1;
返回a;
}, {});
常数加扰=(a,b)=>{
常数aFreq=频率计数(a);
返回Object.entries(frequencyCount(b)).every([e,count])=>
计数