namespace 最长公共子串
{
class Program
{
static void Main(string[] args)
{
string a = "efsdsfdabcdefgaabcdefgaabcdefgefg";
string b = "efsdfdabcdeffzabcdefg";
char[] arr = a.ToCharArray();
char[] brr = b.ToCharArray();
int len_a = a.Length;
int len_b = b.Length;
int[,] distance = InitArray(len_a, len_b, arr, brr);
WriteArray(len_a,len_b, arr, brr, distance);
Console.ReadLine();
}
private static int[,] InitArray(int len_a, int len_b, char[] arr, char[] brr)
{
var nums = new int[len_a + 1, len_b + 1];
for (int i = 1; i <= len_a; i++)
{
for (int j = 1; j <= len_b; j++)
{
if (arr[i - 1] == brr[j - 1]) nums[i, j] = nums[i - 1, j - 1] + 1;
else nums[i, j] = Max(nums[i - 1, j], nums[i, j - 1]);//注释这句,所求为连续的最长子串,不注释这句,所求为不连续的最长子串
}
}
return nums;
}
private static int Max(int p1, int p2)
{
int max = p1;
if (max < p2) max = p2;
return max;
}
private static int Max(int p1, int p2, int p3)
{
int max = p1;
if (max < p2) max = p2;
if (max < p3) max = p3;
return max;
}
private static void WriteArray(int len_a,int len_b ,char[] arr, char[] brr, int[,] distance)
{
for (int j = 0; j <= len_b; j++)
{
if (j > 0)
Console.Write(brr[j - 1] + " ");
else Console.Write(" ");
}
Console.WriteLine();
for (int i = 0; i <= len_a; i++)
{
if (i > 0)
Console.Write(arr[i - 1] + " ");
else Console.Write(" ");
for (int j = 0; j <= len_b; j++)
{
Console.Write(ToString(distance[i, j]) + " ");
}
Console.WriteLine();
}
}
private static string ToString(int n)
{
if (n < 10) return "0" + n;
return n + "";
}
}
}
C# -算法:最长公共子串
猜你喜欢
转载自blog.csdn.net/caojunzhi96/article/details/89211746
今日推荐
周排行