2010-03-10 65 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