2017-06-16 4 views
1

私は現在、楽しいためにコードチャレンジを完了しようとしています。ここにシナリオがあります。 str1文字の部分はstr2に一致するように再配置することが可能ならばそれ以外のfalseを返し、trueを返しもっと機能を良くする

書き込みfunction scramble(str1,str2)。例えば


str1'rkqodlw'str2では、出力がtrueを返すべき'world'あります。
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; 
} 
+0

は、あなたが何を意味する「長すぎます」 ? 'scramble(" piosdjfpasoidjfkoawmesfjatkjdsngfayksndglkjysngdlkjantokgsdannkogjmaoriewjgaeoirneorijgaeirgwoef "、" hello ")'私のマシンで0.06msかかる –

+0

'return str2.length == 0? true:false; 'は書き換え可能です!return!str2.length;'。 for(var i = 0、j = str1.length; i

+0

61回のテストが終わった後、「完了するまでに12000ms以上かかる」というエラーが発生しました。 – Josh

答えて

1

私は今、コードを書くしようとするつもりだけど、多分違うapprochは興味深い結果を与えることができる:ここで

私が書いた関数です。 は基本的に私の考えは次のとおりです。

  • 空のオブジェクトを作成しますSTR2をループスタート: の値プロパティを増やし、新たに作成された オブジェクトは、「現在の手紙」と呼ばれる性質を持っており、現在の手紙を入手します他の1、またはによってその項目にオブジェクトの各プロパティの値さて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

関連する問題