1         /// <summary>
 2         /// 动态规划:求最大公共子串
 3         /// LCS (Longest Common Subsequence)
 4         /// </summary>
 5         private static string LCS(string str1, string str2)
 6         {
 7             var d = new int[str1.Length, str2.Length];
 8             var index = 0;
 9             var length = 0;
10             for (int i = 0; i < str1.Length; i++)
11             {
12                 for (int j = 0; j < str2.Length; j++)
13                 {
14                     var n = i - 1 >= 0 && j - 1 >= 0 ? d[i - 1, j - 1] : 0;  //左上角
15                     d[i, j] = str1[i] == str2[j] ? 1 + n : 0; //当前节点值 = “1 + 左上角的值”:“0”
16                     if (d[i, j] > length)  //如果是最大值,则记录该值和行号
17                     {
18                         length = d[i, j];
19                         index = i;
20                     }
21                 }
22             }
23             return str1.Substring(index - length + 1, length);
24         }
25
26         /// <summary>
27         /// 自己写的LCS,可求最大子串,最大串重复情况未考虑
28         /// </summary>
29         /// <param name="str1"></param>
30         /// <param name="str2"></param>
31         /// <returns></returns>
32         private static string myLcs(string str1, string str2)
33         {
34             int[,] arr = new int[str1.Length, str2.Length];
35             int max = 0;
36             int maxIndex = 0;
37             for (int i = 0; i < str1.Length; i++)
38             {
39                 for (int j = 0; j < str2.Length; j++)
40                 {
41                     if (str1[i] == str2[j])
42                     {
43                         arr[i, j] = (i > 0 && j > 0) ? (arr[i - 1, j - 1] + 1) : 1;
44                         if (arr[i, j] > max)
45                         {
46                             max = arr[i, j];
47                             maxIndex = i;
48                         }
49                     }
50                 }
51             }
52
53             return str1.Substring(maxIndex - max + 1,max);
54         }

转载于:https://www.cnblogs.com/zhangzhu/archive/2012/12/27/2836146.html

动态规划:求最大公共子串相关推荐

  1. 动态规划—最长公共子串

    1.求最长公共子串的长度 问题描述:有两个字符串str和str2,求出两个字符串中最长公共子串长度.str=acbcbcef,str2=abcbced,则str和str2的最长公共子串为bcbce,最 ...

  2. 动态规划——最长公共子串,没有比这更通俗易懂的了

    前言 动态规划是大厂的热门考点,其中最长公共子串与最长公共子序列这两道题出现得尤其频繁,这两道题其实有挺多变种,很适合考察侯选人对动态规划的掌握情况,今天我们就先来看看如何求解最长公共子串,图文并茂, ...

  3. 动态规划--最长公共子串

    找两个字符串的最长公共子串,这个子串要求在原字符串中是连续的.其实这又是一个序贯决策问题,可以用动态规划来求解.我们采用一个二维矩阵来记录中间的结果.这个二维矩阵怎么构造呢?"bab&quo ...

  4. 用java实现串匹配问题_java实现字符串匹配问题之求最大公共子串

    转载请注明出处:http://blog.csdn.net/xiaojimanman/article/details/38924981 最近在项目工作中有一个关于文本对比的需求,经过这段时间的学习,总结 ...

  5. 【To Understand】动态规划:求最长公共子串/最长公共子序列

    动态规划:求最长公共子串/最长公共子序列 本博客转载自:https://blog.csdn.net/u013074465/article/details/45392687 该博客中详细讲解了求最长公共 ...

  6. 动态规划:求最长公共子序列和最长公共子串

    最长公共子序列(LCS): 这同样是一道经典题目,定义就不说了. 为了方便说明,我们用Xi代表{x1,x2,‥xi},用Yj代表{y1,y2,‥yj}.那么,求长度分别为m,n的两个序列X,Y的LCS ...

  7. 【动态规划】最长公共子序列与最长公共子串

    1. 问题描述 子串应该比较好理解,至于什么是子序列,这里给出一个例子:有两个母串 cnblogs belong 比如序列bo, bg, lg在母串cnblogs与belong中都出现过并且出现顺序与 ...

  8. 动态规划套路在最长公共子串、最长公共子序列和01背包问题中的应用

    2019独角兽企业重金招聘Python工程师标准>>> 适合动态规划(DP,dynamic programming)方法的最优化问题有两个要素:最优子结构和重叠子问题. 最优子结构指 ...

  9. 动态规划 dp03 最长公共子串问题 c代码

    题目: 若序列Z是序列X的子序列,又是Y的子序列,则称Z是序列X与Y的公共子序列.例如序列"bcba"是序列"abcbdab"与"bdcaba&quo ...

最新文章

  1. Joomla和Drupal简介
  2. 精品软件 推荐 硬盘物理序列号修改专家
  3. 模型诊断(Model Diagnostics)是什么?具体包含哪些内容?
  4. ssh开发实战之整合篇
  5. 第4周小组作业:WordCount优化
  6. phython在file同时写入两个_轻松支撑百万级数据点写入 京东智联云时序数据库HoraeDB架构解密...
  7. linux sha1sum命令,讲解Linux中校验文件的MD5码与SHA1码的命令使用
  8. Java中的垃圾回收器的类型概述 《对Java的分析总结》(六)
  9. 信号量、使用信号量来完成读写模型(消费者生产者模型)线程池、读写锁面试题
  10. 杂项:Java un
  11. DeepStream输出插件Gst-nvmsgconv和Gst-nvmsgbroker
  12. atitit.php 流行框架 前三甲为:Laravel、Phalcon、Symfony2 attilax 总结
  13. python窗口怎么显示,如何使用Python在没有窗口的屏幕上显示文本
  14. 申克称重控制器维修称重仪表VEG20612/VDB20600
  15. 利用red5搭建一个简单的流媒体直播系统(ubuntu 12.10)
  16. turtle的setheading函数详解
  17. C# 使用NPIO在excel指定单元格写内容,合并单元格
  18. 安全进化的终极猜想— 以“AI之盾”对抗“AI之矛”
  19. 山西票号的内部控制分析
  20. 如何快速学习Python?

热门文章

  1. 行走在区块链上的智能合约
  2. colab中的变量怎么读取_Fizyr Retinanet在Colab中进行目标检测
  3. swift设置启动图不现实_如何通过装饰房屋来开始在Swift中使用增强现实
  4. javascript网络_没有JavaScript的网络外观
  5. 参加过java培训机构的学员如何找出路
  6. maven jar包冲突常见报错及解决方法
  7. Java基础学习总结(13)——流IO
  8. httpd服务相关实验
  9. 《HTML5游戏编程核心技术与实战》——2.8 小结
  10. centos查看特定程序占用端口情况