检查str1是否可以用JavaScript重新排列为str2

检查str1是否可以用JavaScript重新排列为str2,javascript,Javascript,有两个字符串称为str1和str2,我试图检查str1是否可以重新安排为str2 例如:假设str1=“aabbcamaomscdd”和str2=“逗号”。 是否可以在“str1”中写出“逗号”一词 功能加扰(str1、str2){ 设arr=[]; 设str1arr=str1.split(“”); 设str2arr=str2.split(“”); 设j=0; 对于(设i=0;i),您可以获取数组并对它们进行排序,然后对照第一个字符串/数组检查第二个字符串/数组的每个字符 函数比较([…a],

有两个字符串称为
str1
str2
,我试图检查str1是否可以重新安排为str2

例如:假设str1=“aabbcamaomscdd”和str2=“逗号”。 是否可以在“str1”中写出“逗号”一词

功能加扰(str1、str2){
设arr=[];
设str1arr=str1.split(“”);
设str2arr=str2.split(“”);
设j=0;

对于(设i=0;i),您可以获取数组并对它们进行排序,然后对照第一个字符串/数组检查第二个字符串/数组的每个字符

函数比较([…a],…b]){
a、 排序();
返回b.sort().every((i=>v=>{
而(ilog(compare(“aabbcamaomccdd”,“逗号”);//false
您应该检查两个字符串是否包含相同的字符,如下所示:

功能加扰(str1、str2){
变量s1=str1.拆分(“”);
var s2=标准差分(“”);
var i;
对于(i=0;iconsole.log(scramble('xcab1c','abxcc1');
您可以计算第一个字符串中每个字符的频率。下面我使用了
.reduce()
使用键-值对构建对象,其中键表示
s1
字符串中的一个字符,值是它出现的次数。然后,您可以循环查看
s2
中的字符,并检查频率图中是否出现每个字符。当您看到一个字符时,可以从中减去一个字符的值表示该字符已被“使用”的frequency对象。如果
.every()
回调返回错误值(例如值为0),则结果将为
false
,因为无法重新排列字符串:

const-scramble=(s1,s2)=>{
常量s1Freq=[…s1].reduce((o,c)=>({…o,[c]:(o[c]| | 0)+1}),{});
返回[…s2].every(char=>s1Freq[char]--);
}
log(加扰(“aabbcamaomscdd”,“逗号”);//true
log(加扰(“abc321”,“123”);//true
log(加扰(“a3b2c11”、“1231”);//true
console.log(加扰(“a”,“a”);//true

console.log(scramble(“xyz”,“xyt”);//false
对字符串进行排序和比较工作吗?您应该说只测试了字符串1的一部分,而不是整个字符串,因为它改变了任务:我不理解str1部分的含义。str1基本上是加扰的字母,如str1=“aabbcamaomscdd”和str2 is=“逗号”比如说。问题是,你可以从str1中的字母中辨认出逗号。如果st1和st2的长度不相同,这就行不通了。当然行!如果s2更长,那么在某个时候,你会在
indexOf()中得到-1
。如果s1较长,则返回s1时将为false。长度===0
我实际上不知道为什么您的代码未通过测试,我觉得这很好。但我将If改为
If(idx>1){s1.splice(idx,1)
并在
if
之后放置一个返回false的
else
。现在它通过了测试,但仍然无法通过性能测试并超时。
function scramble(str1, str2) {

  let arr=[]; 
  let str1arr =  str1.split("");
  let str2arr =  str2.split("");
  let j=0;
  
  for(let i=0; i<str1.length; i++){
    if(str1arr[i]==str2arr[j]){
      arr.push(str1arr[i]);
      str1arr=str1arr.splice(i,1);
      j++;
      i=0;
      
    }
    
  }if(arr.toString()===str2arr.toString()){
    return true;
  }else{
    return false;
  }
    }