2010-03-10 3 views
1

두 단어에 공통 문자가 있는지 확인하려면 어떻게합니까?문자열의 문자 비교 알고리즘

ex. "단어"와 "문자"일반적인 "R"

"단어"와이 "이메일"이되지 않은 일반 문자

두 단어가이 개 공통의 ​​문자가있는 경우 내가 4을 얻을 수 있기 때문에이 코드는 잘못

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

답변

5

귀하의 코드는 from 절 복수를 사용하여 변경할 수 없기 작동하지 않는 결과는 완전 외부

당신은 사용할 필요가 가입 만들어 Intersect :

int commonCount = word1.Intersect(word2).Count(); 

IntelliSense에는 표시되지 않지만 StringIEnumerable<char>을 구현하므로 ToCharArray()을 호출 할 필요가 없습니다.

이것은 각 문자를 한 번만 계산하므로 두 문자열에 동일한 문자가 두 번 포함되어 있으면 한 번만 계산됩니다. 제대로 작동하지 않는

var commonChars = word1.Intersect(word2); 
var commonCount = commonChars.Sum(c => Math.Min(
    word1.Count(q => q == c), 
    word2.Count(q => q == c) 
)); 
+0

:

여러 항목을 계산하려면

다음 코드를 사용합니다. 예. 문자열 word1 = "와우"; 문자열 word2 = "방법"; 결과는 2입니다. – user278618

+1

예; 무엇을 기대 하시겠습니까? – SLaks

+0

나는 1 개의 유사한 낱말이 있기 때문에 1 개를 예상한다. "방법"에는 단 하나의 'W'가 있습니다. – user278618

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

문자열 word1 = "훌륭함"; 문자열 word2 = "와우"; 결과는 2입니다. – user278618

+0

OK, 좋지 않니? 예상되는 결과는 무엇입니까? –

+0

1은 예상 값입니다. – user278618