动态规划:求最大公共子串
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.求最长公共子串的长度 问题描述:有两个字符串str和str2,求出两个字符串中最长公共子串长度.str=acbcbcef,str2=abcbced,则str和str2的最长公共子串为bcbce,最 ...
- 动态规划——最长公共子串,没有比这更通俗易懂的了
前言 动态规划是大厂的热门考点,其中最长公共子串与最长公共子序列这两道题出现得尤其频繁,这两道题其实有挺多变种,很适合考察侯选人对动态规划的掌握情况,今天我们就先来看看如何求解最长公共子串,图文并茂, ...
- 动态规划--最长公共子串
找两个字符串的最长公共子串,这个子串要求在原字符串中是连续的.其实这又是一个序贯决策问题,可以用动态规划来求解.我们采用一个二维矩阵来记录中间的结果.这个二维矩阵怎么构造呢?"bab&quo ...
- 用java实现串匹配问题_java实现字符串匹配问题之求最大公共子串
转载请注明出处:http://blog.csdn.net/xiaojimanman/article/details/38924981 最近在项目工作中有一个关于文本对比的需求,经过这段时间的学习,总结 ...
- 【To Understand】动态规划:求最长公共子串/最长公共子序列
动态规划:求最长公共子串/最长公共子序列 本博客转载自:https://blog.csdn.net/u013074465/article/details/45392687 该博客中详细讲解了求最长公共 ...
- 动态规划:求最长公共子序列和最长公共子串
最长公共子序列(LCS): 这同样是一道经典题目,定义就不说了. 为了方便说明,我们用Xi代表{x1,x2,‥xi},用Yj代表{y1,y2,‥yj}.那么,求长度分别为m,n的两个序列X,Y的LCS ...
- 【动态规划】最长公共子序列与最长公共子串
1. 问题描述 子串应该比较好理解,至于什么是子序列,这里给出一个例子:有两个母串 cnblogs belong 比如序列bo, bg, lg在母串cnblogs与belong中都出现过并且出现顺序与 ...
- 动态规划套路在最长公共子串、最长公共子序列和01背包问题中的应用
2019独角兽企业重金招聘Python工程师标准>>> 适合动态规划(DP,dynamic programming)方法的最优化问题有两个要素:最优子结构和重叠子问题. 最优子结构指 ...
- 动态规划 dp03 最长公共子串问题 c代码
题目: 若序列Z是序列X的子序列,又是Y的子序列,则称Z是序列X与Y的公共子序列.例如序列"bcba"是序列"abcbdab"与"bdcaba&quo ...
最新文章
- Joomla和Drupal简介
- 精品软件 推荐 硬盘物理序列号修改专家
- 模型诊断(Model Diagnostics)是什么?具体包含哪些内容?
- ssh开发实战之整合篇
- 第4周小组作业:WordCount优化
- phython在file同时写入两个_轻松支撑百万级数据点写入 京东智联云时序数据库HoraeDB架构解密...
- linux sha1sum命令,讲解Linux中校验文件的MD5码与SHA1码的命令使用
- Java中的垃圾回收器的类型概述 《对Java的分析总结》(六)
- 信号量、使用信号量来完成读写模型(消费者生产者模型)线程池、读写锁面试题
- 杂项:Java un
- DeepStream输出插件Gst-nvmsgconv和Gst-nvmsgbroker
- atitit.php 流行框架 前三甲为:Laravel、Phalcon、Symfony2 attilax 总结
- python窗口怎么显示,如何使用Python在没有窗口的屏幕上显示文本
- 申克称重控制器维修称重仪表VEG20612/VDB20600
- 利用red5搭建一个简单的流媒体直播系统(ubuntu 12.10)
- turtle的setheading函数详解
- C# 使用NPIO在excel指定单元格写内容,合并单元格
- 安全进化的终极猜想— 以“AI之盾”对抗“AI之矛”
- 山西票号的内部控制分析
- 如何快速学习Python?