1. ホーム
  2. javascript

[解決済み】javascriptでのアナグラムファインダー

2022-02-10 09:54:27

質問

私はJavaScriptで、与えられた一連の単語の中からすべてのアナグラムを見つけるプログラムを書くことになっています。

monk, konm, nkom, bbc, cbb, dell, ledl, llde

出力は行単位に分類される必要があります。

1. monk konm, nkom;
2. bbc cbb;
3. dell ledl, llde;

すでにアルファベット順に並べ替えて、配列にしています。

kmno kmno bbc bbc dell dell

しかし、私は配列内の一致するアナグラムを比較し、見つけることに行き詰っています。

何かお手伝いいただけると幸いです。

解決方法は?

Javascriptのオブジェクトは、基本的にキー/バリューストアであるため、この目的に最適です。

// Words to match
var words = ["dell", "ledl", "abc", "cba"];

// The output object
var anagrams = {};

for (var i in words) {
    var word = words[i];

    // sort the word like you've already described
    var sorted = sortWord(word);

    // If the key already exists, we just push
    // the new word on the the array
    if (anagrams[sorted] != null) {
        anagrams[sorted].push(word);
    } 
    // Otherwise we create an array with the word
    // and insert it into the object
    else {
        anagrams[sorted] = [ word ];
    }
}

// Output result
for (var sorted in anagrams) {
    var words = anagrams[sorted];
    var sep = ",";
    var out = "";
    for (var n in words) {
        out += sep + words[n];
        sep = "";
    }
    document.writeln(sorted + ": " + out + "<br />");
}