开发者

Algorithm for comparing chars in strings

How do I check if two words have a common char?

ex. : "word" an开发者_开发技巧d "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();


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)
));


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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜