LCS 最长公共子串算法实现 C#
返回最长串长度
public static int lcs(ref string str1, ref string str2)
{
if (str1 == str2)
return str1.Length;
int[] maxtix = new int[str1.Length];
int maxLength = 0;
int startNum = 0;
int str1Num = str1.Length;
int str2Num = str2.Length;
if ((String.IsNullOrEmpty(str1)) || (String.IsNullOrEmpty(str2)))
{
//return String.Empty;
return 0;
}
for (int i = 0; i < str2Num; i++)
{
for (int j = str1Num - 1; j >= 0; j = j - 1)
{
if (str2[i] == str1[j])
{
if ((i == 0) || (j == 0))
{
maxtix[j] = 1;
}
else
{
maxtix[j] = maxtix[j - 1] + 1;
}
}
else
{
maxtix[j] = 0;
}
if (maxtix[j] > maxLength)
{
maxLength = maxtix[j];
startNum = j;
}
}
}
if (maxLength == 0)
{
//return String.Empty;
return 0;
}
//return str1.Substring(startNum - maxLength + 1, maxLength);
return maxLength;
}
public static int lcs(ref string str1, ref string str2)
{
if (str1 == str2)
return str1.Length;
int[] maxtix = new int[str1.Length];
int maxLength = 0;
int startNum = 0;
int str1Num = str1.Length;
int str2Num = str2.Length;
if ((String.IsNullOrEmpty(str1)) || (String.IsNullOrEmpty(str2)))
{
//return String.Empty;
return 0;
}
for (int i = 0; i < str2Num; i++)
{
for (int j = str1Num - 1; j >= 0; j = j - 1)
{
if (str2[i] == str1[j])
{
if ((i == 0) || (j == 0))
{
maxtix[j] = 1;
}
else
{
maxtix[j] = maxtix[j - 1] + 1;
}
}
else
{
maxtix[j] = 0;
}
if (maxtix[j] > maxLength)
{
maxLength = maxtix[j];
startNum = j;
}
}
}
if (maxLength == 0)
{
//return String.Empty;
return 0;
}
//return str1.Substring(startNum - maxLength + 1, maxLength);
return maxLength;
}
浙公网安备 33010602011771号