Поиск анаграмм в JavaScript

То, как это делается, - это сериализация массива, что означает «создание из него строки». Чтобы лучше понять это, посмотрите на это:

$array = array("my", "litte", "array", 2);

$serialized_array = serialize($array); 
$unserialized_array = unserialize($serialized_array); 

var_dump($serialized_array); // gives back a string, perfectly for db saving!
var_dump($unserialized_array); // gives back the array again
13
задан jiaoziren 26 May 2009 в 08:28
поделиться

2 ответа

Объекты 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 />");
}
9
ответ дан 1 December 2019 в 00:21
поделиться

Вот мой вариант:

var input = "monk, konm, bbc, cbb, dell, ledl";
var words = input.split(", ");

for ( var i = 0; i < words.length; i++) {

    var word = words[i];
    var alphabetical = word.split("").sort().join("");

    for (var j = 0; j < words.length; j++) {

        if (i === j) {
            continue;
        }

        var other = words[j];
        if(alphabetical === other.split("").sort().join("")){
            console.log(word + " - " + other + " (" + i + ", " + j + ")");
        }
    }
}

где будет вывод (слово, совпадение и индекс обоих):

monk - konm (0, 1)
konm - monk (1, 0)
bbc - cbb (2, 3)
cbb - bbc (3, 2)
dell - ledl (4, 5)
ledl - dell (5, 4)

Чтобы получить символы в алфавитном порядке, я использовал split ("") для получения массива, назвал sort () и использовал join (""), чтобы получить строку из массива.

16
ответ дан 1 December 2019 в 00:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: