用于比较字符串中的字符的算法

use*_*618 1 c# linq

如何检查两个单词是否有共同的字符?

恩.:"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)

SLa*_*aks 5

您的代码不起作用因为使用多个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)

  • 你忘记了他们都有一个'o`. (2认同)