Найти количество различий в 2 строках - PullRequest
1 голос
/ 14 апреля 2010
int n = string.numDifferences("noob", "newb"); // 2

??

Ответы [ 4 ]

12 голосов
/ 14 апреля 2010

Номер, который вы пытаетесь найти, называется расстояние редактирования . В Википедии перечислено несколько алгоритмов, которые вы можете использовать; Расстояние Хэмминга - это очень распространенный способ определения разницы редактирования между двумя строками одинаковой длины (он часто используется в кодах с исправлением ошибок); Расстояние Левенштейна аналогично, но также учитывает вставки и удаления. В Википедии, конечно же, перечислены несколько других ( например, расстояние Дамерау-Левенштейна , которое включает в себя транспозиции); Я не знаю, что вы хотите, так как я не эксперт, и выбор зависит от конкретной области. Один из них, тем не менее, должен сделать свое дело.

1 голос
/ 14 апреля 2010

У вас уже есть отличные ответы, если вы имеете в виду «редактировать расстояние». Если вы просто имеете в виду «количество символов, которые отличаются» (для двух строк одинаковой длины), в Python самый простой подход будет выглядеть так:

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

и, если вы также хотите добавить разницу в длине, добавьте

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

Конечно, если вы хотите хотите редактировать расстояния, этот подход был бы слишком упрощенным; -).

1 голос
/ 14 апреля 2010

Предполагая, что вы хотите сравнивать только символы с одинаковыми индексами, следующее решение C # (с использованием методов, предоставленных LINQ) должно помочь:

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

Это «архивирует» две строки, а затем возвращает 0 для каждого индекса, где символы одинаковы, и 1 для каждого индекса, где они различаются. Затем мы просто суммируем числа и получаем результат.

0 голосов
/ 14 апреля 2010
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

Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...