Reputation: 20292
How do I check if two words have a common char?
ex. : "word" and "letter" have common "r"
"word" and "email" haven't any common chars
This code is wrong because if two words have 2 common chars I get 4 in the result
int numberOfCommonChars = (from c1 in word1.ToCharArray()
from c2 in word2.ToCharArray()
where c1 == c2
select c1).Count();
Upvotes: 1
Views: 192
Reputation: 888233
Your code isn't working becasue using multiple from
clauses creates a full outer join
You need to use Intersect
:
int commonCount = word1.Intersect(word2).Count();
Although it doesn't show in IntelliSense, String
implements IEnumerable<char>
, so you don't need to call ToCharArray()
.
Note that this will only count each character once, so if both strings contain the same character twice, this will only count it once.
If you want to count multiple occurrences, use the following code:
var commonChars = word1.Intersect(word2);
var commonCount = commonChars.Sum(c => Math.Min(
word1.Count(q => q == c),
word2.Count(q => q == c)
));
Upvotes: 5
Reputation: 13509
int numberOfCommonChars = (from c1 in word1.ToCharArray()
from c2 in word2.ToCharArray()
where c1 == c2
select c1).Distinct().Count();
Upvotes: 0