如何检查两个单词是否有共同的字符?
恩.:"word"和"letter"有共同的"r"
"字"和"电子邮件"没有任何共同的字符
这段代码是错误的,因为如果两个单词有两个共同的字符,我会在结果中得到4
int numberOfCommonChars = (from c1 in word1.ToCharArray()
from c2 in word2.ToCharArray()
where c1 == c2
select c1).Count();
Run Code Online (Sandbox Code Playgroud)
您的代码不起作用因为使用多个from子句创建一个完整的外部联接
你需要使用Intersect:
int commonCount = word1.Intersect(word2).Count();
Run Code Online (Sandbox Code Playgroud)
虽然它不显示在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)
));
Run Code Online (Sandbox Code Playgroud)