2.8 KiB
id, title, challengeType, forumTopicId, dashedName
id | title | challengeType | forumTopicId | dashedName |
---|---|---|---|---|
5e4ce2eaac708cc68c1df260 | Distanza di Levenshtein | 5 | 385264 | levenshtein-distance |
--description--
Nella teoria dell'informazione e nell'informatica, la distanza di Levenshtein è una [metrica](https://en.wikipedia.org/wiki/string metric) per misurare la quantità di differenza tra due sequenze (cioè una [edit distance](https://en.wikipedia.org/wiki/edit distance)). La distanza Levenshtein tra due stringhe è definita come il numero minimo di modifiche necessarie per trasformare una stringa nell'altra, dove le operazioni di modifica consentite sono inserimento, cancellazione o sostituzione di un singolo carattere.
Esempio:
La distanza di Levenshtein tra "kitten" e "sitting" è 3, dal momento che le seguenti tre modifiche cambiano una nell'altra, e non c'è un modo per farlo con meno di tre modifiche:
- kitten sitten (sostiruzione di 'k' con 's')
- sitten sittin (sostituzione di 'e' con 'i')
- sittin sitting (inserisci 'g' alla fine).
La distanza Levenshtein tra "rosettacode", "raisethysword" è 8.
La distanza tra due stringhe è uguale a quella tra le due stringhe scritte al contrario.
--instructions--
Scrivi una funzione che restituisce la distanza di Levenshtein tra due stringhe fornite come parametri.
--hints--
levenshtein
dovrebbe essere una funzione.
assert(typeof levenshtein == 'function');
levenshtein("mist", "dist")
dovrebbe restituire un numero.
assert(typeof levenshtein('mist', 'dist') == 'number');
levenshtein("mist", "dist")
dovrebbe restituire 1
.
assert.equal(levenshtein('mist', 'dist'), 1);
levenshtein("tier", "tor")
dovrebbe restituire 2
.
assert.equal(levenshtein('tier', 'tor'), 2);
levenshtein("kitten", "sitting")
dovrebbe restituire 3
.
assert.equal(levenshtein('kitten', 'sitting'), 3);
levenshtein("stop", "tops")
dovrebbe restituire 2
.
assert.equal(levenshtein('stop', 'tops'), 2);
levenshtein("rosettacode", "raisethysword")
dovrebbe restituire 8
.
assert.equal(levenshtein('rosettacode', 'raisethysword'), 8);
levenshtein("mississippi", "swiss miss")
dovrebbe restituire 8
.
assert.equal(levenshtein('mississippi', 'swiss miss'), 8);
--seed--
--seed-contents--
function levenshtein(a, b) {
}
--solutions--
function levenshtein(a, b) {
var t = [], u, i, j, m = a.length, n = b.length;
if (!m) { return n; }
if (!n) { return m; }
for (j = 0; j <= n; j++) { t[j] = j; }
for (i = 1; i <= m; i++) {
for (u = [i], j = 1; j <= n; j++) {
u[j] = a[i - 1] === b[j - 1] ? t[j - 1] : Math.min(t[j - 1], t[j], u[j - 1]) + 1;
} t = u;
} return u[n];
}