(C#)最大公共子串

原创 2016年08月29日 18:35:20

这道算法题目,见了好多遍了,也没时间好好整理一下。这次稍微看了一点。

首先题目意思是这样的:

                                           两个字符串,求公共的连续子串的最大长度。

 例如:s1:  abcd    s2:bcde  则最大公共子串长度是3


首先,让我们看一下暴力解决:

<span style="font-size:18px;"> static int common(String s1, String s2)
        {
            int maxcount = 0;
            for (int i = 0; i < s1.Length; i++)
            {
                for (int j = 0; j < s2.Length; j++)
                {
                    if (s1[i] == s2[j])
                    {
                        int tempcount=0;
                        for (int k1 = i,k2=j; k1 < s1.Length && k2<s2.Length; k1++,k2++)
                        {
                            if (s1[k1] == s2[k2])
                            {
                                tempcount++;
                            }
                            else
                            {
                                break;
                            }
                        }
                        if (tempcount > maxcount)
                        {
                            maxcount = tempcount;
                        }
                    }
                }
            }
            return maxcount;
        }</span>
暴力解决,明显是三层循环啊,所以是O(n^3)

下面,让我们先看一下动态规划的优化第一步:计算len[i][j]=len[i-1][j-1](前提是两个字符相同的情况下)

<span style="font-size:18px;"> static int commonmax(string s1, string s2)
        {
            int[,] len=new int[s1.Length,s2.Length];
            int max = 0;
            for (int i = 0; i < s1.Length; i++)
            {
                for (int j = 0;j< s2.Length; j++)
                {
                    if (s1[i] == s2[j])
                    {
                        if (i == 0 || j == 0)
                        {
                            len[i,j] = 1;
                            if (max < len[i,j])
                            {
                                max = len[i,j];
                            }
                        }
                        else
                        {
                            len[i,j] = len[i - 1,j - 1]+1;
                            if (max < len[i,j])
                            {
                                max = len[i,j];
                            }
                        }
                    }
                    else
                    {
                        len[i,j] = 0;
                    }
                }
            }
            return max;
        }</span>

画一个简图看一下:

       (s2)  b  c    d  e

(s1)

a             0  0    0   0

b             1   0   0   0

c             0    2   0  0

d             0    0   3  0



第八届蓝桥杯【省赛试题6】最大公共子串

题目描述: 最大公共子串长度问题就是: 求两个串的所有子串中能够匹配上的最大长度是多少。 比如:"abcdkkk" 和 "baabcdadabc", 可以找到的最长的公共子串是"abcd",所以最大公...
  • qq_34594236
  • qq_34594236
  • 2017年04月08日 19:49
  • 1314

蓝桥杯java第八届B组:最大公共子串

最大公共子串 最大公共子串长度问题就是: 求两个串的所有子串中能够匹配上的最大长度是多少。 比如:"abcdkkk" 和 "baabcdadabc", 可以找到的最长的公共子串...
  • yf224
  • yf224
  • 2017年05月11日 11:58
  • 339

蓝桥杯java第八届第六题--最大公共子串

标题:最大公共子串最大公共子串长度问题就是: 求两个串的所有子串中能够匹配上的最大长度是多少。比如:"abcdkkk" 和 "baabcdadabc", 可以找到的最长的公共子串是"abcd",所以最...
  • sihai12345
  • sihai12345
  • 2017年04月14日 10:10
  • 586

sdutacm-最大公共子串

山东理工acm平台题解
  • axuhongbo
  • axuhongbo
  • 2017年02月26日 17:21
  • 807

2017第八届蓝桥杯B组省赛第六题:最大公共子串

第六题 标题:最大公共子串 最大公共子串长度问题就是: 求两个串的所有子串中能够匹配上的最大长度是多少。 比如:"abcdkkk" 和 "baabcdadabc", 可以找到的最长的公共子串是"...
  • qq_25821067
  • qq_25821067
  • 2017年04月15日 17:38
  • 702

第八届蓝桥杯第6题最大公共子串

答案:a[i-1][j-1]+1 标题:最大公共子串 最大公共子串长度问题就是: 求两个串的所有子串中能够匹配上的最大长度是多少。 比如:"abcdkkk" 和 "baabcdadabc", ...
  • z956281507
  • z956281507
  • 2017年04月08日 15:07
  • 1232

华为OJ(最长公共子串及公共最长子序列)

先说直观的方法,先给出链接:http://blog.csdn.net/xpyimapingchuan/article/details/46822645 直接上代码,很好懂,不多说了。 方案1: ...
  • yiqiwangxi
  • yiqiwangxi
  • 2015年08月14日 21:51
  • 901

两个或N个字符串最大公共子串算法

在版里看到有人问最大公共字串的问题,自己学习后在这里将总结发出来。最大公共字串分为两类,一类是我们大家所熟知的两个字符串的最大公共子串,另一个是我在搜索中发现的就是N个字符串的最大公共字串问题。首先来...
  • jianzhibeihang
  • jianzhibeihang
  • 2009年12月11日 11:52
  • 14205

c语言:查找两个字符串的最大公共子串

题目:编程实现查找两个字符串的最大公共子串 示例:”aocdfe”和”pmcdfa”最大公共子串为”cdf” 思路: 输入两个字符串,由短字符串的长度决定比较次...
  • SupreV
  • SupreV
  • 2017年11月24日 20:15
  • 585

Python最长公共子串和最长公共子序列的实现

最长公共子串 (The Longest Common Substring)     LCS问题就是求两个字符串最长公共子串的问题。解法就是用一个矩阵来记录两个字符串中所有位置的两个字符之间的匹配情况,...
  • wateryouyo
  • wateryouyo
  • 2016年03月17日 22:33
  • 8195
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:(C#)最大公共子串
举报原因:
原因补充:

(最多只允许输入30个字)