C# 查找两个字符串中的差异数

C# 查找两个字符串中的差异数,c#,.net,php,c++,python,C#,.net,Php,C++,Python,? 希望这有帮助 希望这有助于假设您只想比较相同索引下的字符,下面的C#解决方案(使用LINQ提供的方法)应该可以做到这一点: import math def differences(s1, s2): count = 0 for i in range(len(s1)): count += int(s1[i] != s2[1]) # count += math.sqrt( (len(s1) - len(s2)) **2) #add this line if t

?

希望这有帮助


希望这有助于

假设您只想比较相同索引下的字符,下面的C#解决方案(使用LINQ提供的方法)应该可以做到这一点:

import math
def differences(s1, s2):
    count = 0
    for i in range(len(s1)):
        count += int(s1[i] != s2[1])
#    count += math.sqrt( (len(s1) - len(s2)) **2) #add this line if the two strings are of different length and differences counts the how many characters one string has more than the other.
    return count

这将“压缩”两个字符串,然后对于字符相同的每个索引返回0,对于字符不同的每个索引返回1。然后我们简单地对数字求和,得到结果。

假设您只想比较相同索引下的字符,下面的C#解决方案(使用LINQ提供的方法)应该可以做到这一点:

import math
def differences(s1, s2):
    count = 0
    for i in range(len(s1)):
        count += int(s1[i] != s2[1])
#    count += math.sqrt( (len(s1) - len(s2)) **2) #add this line if the two strings are of different length and differences counts the how many characters one string has more than the other.
    return count

这将“压缩”两个字符串,然后对于字符相同的每个索引返回0,对于字符不同的每个索引返回1。然后我们简单地对这些数字求和,得到结果。

您试图找到的数字称为。维基百科列出了几种你可能想要使用的算法;是查找相同长度的两个字符串之间编辑差异的一种非常常见的方法(通常用于纠错码);方法类似,但也考虑了插入和删除。当然,维基百科列出了其他几种(例如,其中包括换位);我不知道你想要哪个,因为我不是专家,选择是领域特定的。不过,其中一个应该可以解决问题。

您试图查找的号码称为。维基百科列出了几种你可能想要使用的算法;是查找相同长度的两个字符串之间编辑差异的一种非常常见的方法(通常用于纠错码);方法类似,但也考虑了插入和删除。当然,维基百科列出了其他几种(例如,其中包括换位);我不知道你想要哪个,因为我不是专家,选择是领域特定的。不过,其中一个应该能起到作用。

如果你的意思是“编辑距离”,那么你已经得到了很好的答案。在Python中,如果您只是指“不同的字符数”(对于相同长度的两个字符串),最简单的方法是:

var count = s1.Zip(s2, (c1, c2) => c1 == c2 ? 0 : 1).Sum();
如果还要添加长度差,请附加

sum(c1!=c2 for c1, c2 in zip(s1, s2))

当然,如果确实需要编辑距离,这种方法将过于简单;-)

如果你的意思是“编辑距离”,那么你已经得到了很好的答案。在Python中,如果您只是指“不同的字符数”(对于相同长度的两个字符串),最简单的方法是:

var count = s1.Zip(s2, (c1, c2) => c1 == c2 ? 0 : 1).Sum();
如果还要添加长度差,请附加

sum(c1!=c2 for c1, c2 in zip(s1, s2))
当然,如果确实需要编辑距离,这种方法将过于简单;-)

import java.util.*;
类AnagramStringDifference
{public int AnagramStringDifferenceString A,String B)
{int diff=0,Ai=0,Bi=0;
char[]Aa=A.toCharArray();
char[]Bb=B.toCharArray();
数组。排序(Aa);
数组。排序(Bb);
而(Ai
import java.util.*;
类AnagramStringDifference
{public int AnagramStringDifferenceString A,String B)
{int diff=0,Ai=0,Bi=0;
char[]Aa=A.toCharArray();
char[]Bb=B.toCharArray();
数组。排序(Aa);
数组。排序(Bb);

虽然(请参阅我对上面@Anthony解决方案的评论。这里的问题是相同的:您假设从
s1
s2
,这不会产生最短的编辑距离。@wilhelmtell:是的,我在第一句话中提到:-)。不清楚问题是如何计算像这样简单的幼稚计数还是更复杂的计数……请参阅我对上面@Anthony解决方案的评论。这里的问题也是一样:假设从
s1
s2
的幼稚转换,这不会产生最短的编辑距离。@wilhelmtell:是的,我提到过在第一句中:-)。不清楚问题是如何计算像这样简单的天真计数还是更复杂的计数……看看其中一种方法。对于这个问题,什么构成“差异”?除非你回答这个问题,否则你能得到的最佳答案将是那些能为你指出与问题的不同定义相关的可能算法范围的答案,因为任何具体的建议都只适用于问题的单一定义。也就是说:你的问题太模糊了。看看其中一种方法就本问题而言,什么构成“差异”?除非你回答这个问题,否则你能得到的最佳答案将是那些指出与问题的不同定义相关的可能算法范围的答案,因为任何具体建议都只适用于问题的单一定义。也就是说:你的问题太模糊了。