110,536
社区成员
发帖
与我相关
我的任务
分享
/// <summary>
/// 判断两个字符串是否有且仅有一个字符的差异
/// </summary>
public static unsafe bool IsMutationOne(string seq1, string seq2)
{
int len = seq1.Length;
if (len != seq2.Length)
{
return false;
}
bool isfind = false;
fixed (char* pseq1 = seq1)
{
fixed (char* pseq2 = seq2)
{
char* p1 = pseq1;
char* p2 = pseq2;
for (int i = 0; i < len; i++)
{
if (*p1 != *p2)
{
if (isfind)
return false;
else
isfind = true;
}
p1++; p2++;
}
}
}
return isfind;
}
public class stringCompare
{
private HashSet<string> Values;
private char NullChar;
public stringCompare(string[] values, char nullChar)
{
NullChar = nullChar;
Values = new HashSet<string>();
foreach (string oldValue in values)
{
foreach (string value in split(oldValue)) Values.Add(value);
}
}
private unsafe string[] split(string value)
{
int length = value.Length;
string[] values = new string[length];
fixed (char* chars = value.ToCharArray())
{
int index = length;
do
{
chars[--index] = NullChar;
values[index] = new string(chars, 0, length);
chars[index] = value[index];
}
while (index > 0);
}
return values;
}
public bool isValue(string oldValue)
{
foreach (string value in split(oldValue))
{
if (Values.Contains(value)) return true;
}
return false;
}
}
public static bool IsMutationOne(string seq1, string seq2)
{
return seq1.ToCharArray().Except(seq2.ToCharArray()).Count()==1;
}
public static bool IsMutationOne(string seq1, string seq2)
{
if (seq1.Length != seq2.Length)
{
return false;
}
int num = 0;
for (int i = 0; i < seq1.Length; i++)
{
if (seq1[i] != seq2[i])
{
num++;
}
}
if (num == 1) return true;
else return false;
}
public static unsafe bool IsMutationOne(string seq1, string seq2)
{
int len = seq1.Length;
if (len != seq2.Length)
{
return false;
}
fixed (char* p1 = seq1)
fixed (char* p2 = seq2)
{
for (int i = 0; i < len; i++)
{
if (p1[i] != p2[i])
{
for (int j = i + 1; j < len; j++)
{
if (p1[j] != p2[j])
{
return false;
}
}
return true;
}
}
}
return false;
}