2010-03-10 7 views
1

Как проверить, имеет ли два слова общий символ?Алгоритм сравнения символов в строках

ex. : «Слово» и «буква» имеют общий «г»

«слово» и «электронная почта» не какие-то общие символы

Этот код является неправильным, потому что если два слова имеют 2 общих символов я получаю 4 в результат

int numberOfCommonChars = (from c1 in word1.ToCharArray() 
          from c2 in word2.ToCharArray() 
          where c1 == c2 
          select c1).Count(); 

ответ

5

Ваш код не работает, используя мультипликатор еще потому from положения создает полное внешнее соединение

Вы должны использовать Intersect:

int commonCount = word1.Intersect(word2).Count(); 

Хотя он не показан в IntelliSense, String реализует IEnumerable<char>, поэтому вам не нужно звонить ToCharArray().

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

Если вы хотите посчитать несколько экземпляров, используйте следующий код:

var commonChars = word1.Intersect(word2); 
var commonCount = commonChars.Sum(c => Math.Min(
    word1.Count(q => q == c), 
    word2.Count(q => q == c) 
)); 
+0

он не работает должным образом. ex. string word1 = "wow"; string word2 = "how"; это дает мне 2 результата – user278618

+1

Да; что вы ожидаете от этого? – SLaks

+0

Я ожидаю 1, потому что у них есть одно подобное слово. «Как» имеет только один «W» – user278618

0
int numberOfCommonChars = (from c1 in word1.ToCharArray() 
          from c2 in word2.ToCharArray() 
          where c1 == c2 
          select c1).Distinct().Count(); 
+0

string word1 = "wonderful"; string word2 = "wow"; дает 2 результата – user278618

+0

Хорошо, хорошо это или плохо? Каков ожидаемый результат? –

+0

1 ожидается значение – user278618

Смежные вопросы