基于EditDistance算法我编写算法如下,语言C#
有什么没有疏漏的地方,大家给指点下
public class SquareStringOperator
{
public static int SquareStringByEditDistance(string s)
{
int result = s.Length;
for (int i = 1; i < s.Length; i++)
{
int currCount = AlgorithmCollection.EditDistance(s.Substring(0
, i), s.Substring(i, s.Length - i));
if (currCount < result)
result = currCount;
}
return result;
}
}
public class AlgorithmCollection
{
public static int EditDistance(string s1, string s2)
{
const int _arrayLength = 10;
int[,] m = new int[_arrayLength, _arrayLength];
for (int i = 1; i <= s1.Length; i++)
{
m[i, 0] = i;
}
for (int j = 1; j <= s2.Length; j++)
{
m[0, j] = j;
}
for (int i = 1; i <= s1.Length; i++)
{
for (int j = 1; j <= s2.Length; j++)
{
m[i, j] = Min(m[i - 1, j - 1] + (s1[i - 1] == s2[j - 1] ?
0 : 1),
m[i - 1, j] + 1,
m[i, j - 1] + 1);
}
}
return m[s1.Length, s2.Length];
}
private static int Min(int p, int p_2, int p_3)
{
int temp = p_2 < p_3 ? p_2 : p_3;
return p < temp ? p : temp;
}
}
单元测试用例如下:
1 empty
2 ""
3 a
4 aa
5 aac
6 abcabcz