我想比较两个或多个字符在两个字符串中是否不同。 例如
var string1 = "test1"
var string2 = "trsz1"
现在我想检查一下,如果> = 2个字符在这2个字符串中有所不同,则应该输出false。 你会怎么做?
答案 0 :(得分:0)
该算法称为Levenshtein距离
public static int ComputeLevenshteinDistance(string strA, string strB)
{
if (string.IsNullOrEmpty(strA) || string.IsNullOrEmpty(strB))
{
return Math.Max(strA == null ? 0 : strA.Length, strB == null ? 0 : strB.Length);
}
int[,] iArray = new int[strA.Length + 1, strB.Length + 1];
for (int i = 0; i <= strA.Length; i++)
{
iArray[i, 0] = i;
}
for (int i = 0; i <= strB.Length; i++)
{
iArray[0, i] = i;
}
int iCost;
int[] iMin = new int[3];
for (int i = 1; i <= strA.Length; i++)
{
for (int j = 1; j <= strB.Length; j++)
{
iCost = (strA[i - 1] == strB[j - 1]) ? 0 : 1;
iMin[0] = iArray[i - 1, j] + 1;
iMin[1] = iArray[i, j - 1] + 1;
iMin[2] = iArray[i - 1, j - 1] + iCost;
iArray[i, j] = iMin.Min();
}
}
return iArray[strA.Length, strB.Length];
}
所以你可以做..
string string1 = "test1" ;
string string2 = "trsz1";
bool IsDifferent = ComputeLevenshteinDistance(string1, string2) >= 2;
ComputeLevenshteinDistance
计算将string1转换为string2所需的更改次数。如果你想把扭曲计算为一个变化你需要Damerau Levenshtein距离
答案 1 :(得分:0)
如果字符串的长度始终相同,则非常简单:
var count = 0;
for(var i = 0; i < string1.Length; i++)
{
if(string1[i] != string2[i]) count++;
}
return count < 2;
答案 2 :(得分:0)
但现在我想比较字符串以将它们排序为false或true
如果你的字符串大小相同,你可以试试这个:
var string1 = "test1";
var string2 = "trsz1";
var result = string1.Zip(string2, (f, s) => f == s ? true : false).ToList();
//result: true, false, true, false, true
var ifTwoOrMoreDifferent = result.Count(i => i == false) > 1;
如果您的输入大小不同,那么您的最后一行可能会修改如下:
var lengthDif = Math.Abs(string1.Length-string2.Length);
var ifTwoOrMoreDifferent = result.Count(i => i == false) + lengthDif > 1;
答案 3 :(得分:0)
var string1 = "test1" ;
var string2 = "trsz1";
string1.Zip(string2, (x, y) => x.Equals(y)).Where(c=>!c).Count() >= 2
Console.WriteLine(string1.Zip(string2, (x, y) => x.Equals(y)).Where(c=>!c).Count() >= 2);
您还应该了解zip
约束/限制。
该方法逐步执行两个输入序列,应用函数 resultSelector到两个序列的相应元素。该 method返回由返回的值的序列 resultSelector。 如果输入序列的数量不同 元素,该方法组合元素,直到它到达一个结束 序列。例如,如果一个序列有三个元素和 另一个有四个,结果序列只有三个元素。
工作Demo