今天看到一个这样的问题,求2个字符串的公共最大字串,比如aabbccc与abd的最大公共字串是abcd,这个问题用数据库的方式很好解决,把字符串拆成单个的字符,再插入一个单列的表,然后select distinct column from table就可以解决,但是数据库里面的算法又是如何计算的呢,较劲了一下,写了一个小程序,数据库里面的distinct的本质应该也是这样的吧,先看几张图(程序完全手打,没有参照网络任何位置的代码 咯咯)。
转载请注明出处,联系我: [email protected]
本人热衷于数据库技术及算法的研究,志同道合之士, 欢迎探讨
private int j;
private string MaximumCommonSubstring(string str1,string str2)
{
string c = "";
c = CompareString(str1, "");//先让字串1与空值比较,返回字串1的本身的最大公共字串
c = CompareString(str2,c);//再让字串2与上面的结果比较,返回最终的字串
return c;
}
//比较2个字串,返回最大公共字串
private string CompareString(string str1,string str2)
{
for (int i = 0; i < str1.Length; i++)
{
for (j = 0; j < str2.Length; j++)
{
if (str2.Substring(j, 1) == str1.Substring(i, 1))
{
break;
}
}
if (j == str2.Length)
{
str2 += str1.Substring(i, 1);
}
}
return str2;
}
private void Button1_Click(object sender, EventArgs e)
{
textBox3.Text = MaximumCommonSubstring(textBox1.Text,textBox2.Text);
}