2010-03-10 37 views
1

如何檢查兩個單詞是否有共同字符?用於比較字符串中字符的算法

ex。 「字」與「信」有共同的「R」

「字」,「電子郵件」沒有任何共同的字符

此代碼是錯誤的,因爲如果兩個詞有2個普通字符我得到4結果

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

回答

5

您的代碼不工作becasue使用多個from子句創建一個完全外部聯接

您需要使用Intersect

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

雖然它不顯示在智能感知中,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 =「哇」; string word2 =「how」; 它給了我2結果 – user278618 2010-03-10 16:27:46

+1

是的;你期望它給予什麼? – SLaks 2010-03-10 16:30:45

+0

我期望1,因爲他們有一個相似的詞。 「如何」只有一個'W' – user278618 2010-03-10 16:32:30

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

string word1 =「精彩」; string word2 =「哇」; 在結果中給出2 – user278618 2010-03-10 16:29:43

+0

好吧,這是好還是壞?預期的結果是什麼? – 2010-03-10 16:31:33

+0

1預期值 – user278618 2010-03-10 16:33:50