Как получить количество различий в сравнении строк? - PullRequest
0 голосов
/ 12 октября 2010

Я знаю, что могу узнать, равны ли две строки по содержанию, но мне нужно иметь возможность получить количество символов, которые отличаются в результате сравнения двух строковых значений.

Например:

"aaaBaaaCaaaDaaaEaaa"
"aaaXaaaYaaaZaaaEaaa"

так что asnwer 3 для этого случая.

Есть ли простой способ сделать это, используя регулярные выражения, linq или любой другой способ?

РЕДАКТИРОВАТЬ: Также строки очень длинные. Скажите 10k + символов.

Ответы [ 5 ]

4 голосов
/ 12 октября 2010

В случае, если есть вставки и удаления: Расстояние Левенштейна

и вот реализация C #

1 голос
/ 12 октября 2010

Эй, посмотри на это: http://en.wikipedia.org/wiki/Hamming_distance

Это поможет вам, если вы хотите сосчитать удаления и вставки, а не только замены.

1 голос
/ 12 октября 2010

Вы можете использовать LINQ:

string a = "aaaBaaaCaaaDaaaEaaa";
string b = "aaaXaaaYaaaZaaaEaaa";

int result = a.Zip(b, (x, y) => x == y).Count(z => !z)
           + Math.Abs(a.Length - b.Length);

Решение с циклом, вероятно, более эффективно.

0 голосов
/ 12 октября 2010

Если обе строки имеют одинаковую длину и не имеют сложных символов Юникода, таких как суррогаты, вы можете перебирать каждый символ и увеличивать счетчик, если символы в этом индексе в каждой строке разные.

Теоретически невозможно сделать это быстрее. (Вы должны проверить каждый отдельный символ)

0 голосов
/ 12 октября 2010

Я бы просто перебрал массивы символов, добавив счетчик для каждой разницы.

Однако это не учитывает строки различной длины.

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