JavaScript
 Computer >> コンピューター >  >> プログラミング >> JavaScript

文字列1の一部を並べ替えて文字列2と一致させられるかを判定するJavaScript関数の作成方法


問題の概要

文字列1(str1)に含まれる一部の文字を並べ替えることで文字列2(str2)と一致させられる場合には true を、そうでない場合には false を返す関数 scramble(str1, str2) を作成します。

具体例

str1 が 'cashwool'、str2 が 'school' の場合 → true を返す
str1 が 'katas'、str2 が 'steak' の場合 → false を返す

解決のアプローチ

ここでは、両方の文字列を1文字ずつに分割してソートし、短い方の文字列が長い方の文字列に部分文字列として含まれているかどうかを includes() メソッドで確認する方法を使います。「並べ替えて一致させられる」ということは、str2 に必要なすべての文字が str1 の中に存在することと同じ意味だからです。

コード例

const str1 = 'cashwool';
const str2 = 'school';
const scramble = (str1, str2) => {
    const { length: len1 } = str1;
    const { length: len2 } = str2;
    const firstSortedString = str1.split("").sort().join("");
    const secondSortedString = str2.split("").sort().join("");
    if(len1 > len2){
        return firstSortedString.includes(secondSortedString);
    }
    return secondSortedString.includes(firstSortedString);
};
console.log(scramble(str1, str2));

実行結果

コンソールには以下のように出力されます。

true

補足

この方法はコードが簡潔で読みやすいのが特徴です。より長い文字列や複雑なケースで、各文字の出現回数まで厳密に検証したい場合は、文字ごとの出現回数をオブジェクトや Map で集計して比較する実装を検討すると、さらに確実な判定が可能になります。

  1. ChromeでJavaScriptの関数定義を見つける方法|開発者ツールの検索機能を使いこなそう

    Google ChromeでWebサイトのソースコードを解析していると、「このJavaScript関数はどこで定義されているのだろう?」と悩むことがあります。特に大規模なプロジェクトや、複数の外部スクリプトが読み込まれているページでは、目的の関数定義を手作業で探すのは非常に手間がかかります。 Chrome DevToolsの検索機能を使えば一瞬で見つかる 実は、Chromeに標準搭載されているデベロッパーツール(Developer Tools)には、読み込まれたすべてのファイルを横断的に検索できる強力な機能があります。以下の手順に従えば、JavaScriptの関数定義も簡単に見つけられます。

  2. MySQLのCHAR()関数がデフォルトでバイナリ文字列を返すことを確認する方法

    CHAR()関数の戻り値の文字セットを確認するにはMySQLのCHAR()関数が、デフォルトではどのような文字セットの文字列を返すのかを確認したい場合は、CHARSET()関数を使用します。CHARSET()関数にCHAR()関数の結果を渡すことで、戻り値の文字セットを簡単に調べることができます。以下の実行例では、その動作を実際に確かめることができます。 mysql> Select CHARSET(CHAR(85)); +-------------------+ | CHARSET(CHAR(85)) | +-------------------+ | binary