2 dizeleri farklılıkların sayısını bul

4 Cevap
int n = string.numDifferences("noob", "newb"); // 2

?

4 Cevap

Bulmak için çalışıyoruz numarası denir edit distance . Wikipedia lists several algorithms you might want to use; the Hamming distance (genellikle hata düzeltme kodları kullanılan aynı uzunlukta iki dizeleri arasındaki düzenleme farkı bulmak çok yaygın bir yoldur ); Levenshtein distance benzer, ama aynı zamanda hesaba girişleri ve silinmeleri alır. Wikipedia, tabii ki, (transpozisyonları içeren, e.g. Damerau-Levenshtein distance) birçok diğer listeler; Ben uzman değilim ve seçim alanı özel olarak ben, istediğiniz bilmiyorum. Bunlardan biri olsa da, hile yapmak gerekir.

Eğer "düzenlemek mesafe" demek, zaten mükemmel cevaplar aldım. Sadece (aynı uzunlukta iki dizeleri için) "farklı karakter sayısını" demek, Python, basit bir yaklaşım olacaktır:

sum(c1!=c2 for c1, c2 in zip(s1, s2))

Ayrıca uzunluk farkı eklemek istiyorsanız ve append

+ abs(len(s1) - len(s2))

Eğer do düzenlemek mesafeleri istiyorsanız Tabii ki, bu yaklaşım ;-) çok basit olurdu.

import math
def differences(s1, s2):
    count = 0
    for i in range(len(s1)):
        count += int(s1[i] != s2[1])
#    count += math.sqrt( (len(s1) - len(s2)) **2) #add this line if the two strings are of different length and differences counts the how many characters one string has more than the other.
    return count

Umarım bu yardımcı olur

Yalnızca aynı endekslerini karakterleri karşılaştırmak istiyorum varsayarsak, (LINQ tarafından sağlanan yöntemleri kullanarak) aşağıdaki C # çözüm hile yapmak gerekir:

var count = s1.Zip(s2, (c1, c2) => c1 == c2 ? 0 : 1).Sum();

Bu iki dizeleri "fermuarlar", ve sonra karakterler farklı her dizin için aynıdır ve 1 her indeks için 0 döndürür. Sonra biz sadece sayıları toplamak ve sonuç almak.