如何检查两个单词是否有共同的字符?
离。 :“word”和“letter”有共同的“r”
“word”和“email”没有任何共同的字符
这段代码错了,因为如果两个单词有两个共同的字符,我在结果中得到4
int numberOfCommonChars = (from c1 in word1.ToCharArray()
from c2 in word2.ToCharArray()
where c1 == c2
select c1).Count();
答案 0 :(得分: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)
));
答案 1 :(得分:0)
int numberOfCommonChars = (from c1 in word1.ToCharArray()
from c2 in word2.ToCharArray()
where c1 == c2
select c1).Distinct().Count();