关于动态规划:

动态规划最重要的是找到可递推的子问题,然后列出递推公式,最后搜索填表即可。

表空间大小一般是$O(N^2)$级别。但一般来说,由于递推只与前一行有关,所以可优化至O(N)。

给出两个长度分别为n1, n2的字符串S1, S2, 关于他们的最长公共子串,DP方程如下:

L[i,j] = ( S1[i] == s2[j]  ?  L[i-1,j-1]+1 : 0 );

其中L[i,j]表示S1, S2中以第i 和第j 个字符结尾的公共子串的长度。

我们把n1 * n2的表空间遍历一遍就可得出最长公共子串。代码如下:

public String DPlengthOfLongestCommonSubstring(String s1, String s2){

if (s1 == null || s2 == null || s1.length() == 0 || s2.length() == 0){

return "";

}

int start = 0;

int maxLen = 0;

int [][] table = new int[s1.length()][s2.length()];

for (int i = 0; i < s1.length(); i++) {

for (int j = 0; j < s2.length(); j++) {

if (i == 0 || j == 0){

if (s1.charAt(i) == s2.charAt(j)){

table[i][j] = 1;

}

if (table[i][j] > maxLen){

maxLen = table[i][j];

start = i;

}

}else {

if (s1.charAt(i) == s2.charAt(j)){

table[i][j] = table[i-1][j-1] + 1;

}

if (table[i][j] > maxLen){

maxLen = table[i][j];

start = i + 1 - maxLen;

}

}

}

}

return s1.substring(start, start + maxLen);

}

由于只要填表,而后一行值只与前一行有关,因此空间可以省到O(N)。还是DP惯用的一前一后防覆盖法。

/**

* 只用O(N)额外空间

* @param s1

* @param s2

* @return

*/

public String DPlengthOfLongestCommonSubstring2(String s1, String s2){

if (s1 == null || s2 == null || s1.length() == 0 || s2.length() == 0){

return "";

}

int start = 0;

int maxLen = 0;

int[] table = new int[s2.length()];

for (int i = 0; i < s1.length(); i++) {

for (int j = s2.length()-1; j > - 1; j--) {

if (i == 0 || j == 0){

if (s1.charAt(i) == s2.charAt(j)){

table[j] = 1;

}else {

table[j] = 0;

}

if (table[j] > maxLen){

maxLen = table[j];

start = i;

}

}else {

if (s1.charAt(i) == s2.charAt(j)){

table[j] = table[j-1] + 1;

}else {

table[j] = 0;

}

if (table[j] > maxLen){

maxLen = table[j];

start = i + 1 - maxLen;

}

}

}

}

return s1.substring(start, start + maxLen);

}

java最长公共子串_最长公共子串(java)相关推荐

  1. hwd分别是长宽高_衣柜长宽高标准尺寸一般是多少 衣柜怎么保养

    一般的话,我们在市面上购买衣柜的时候会考虑尺寸的问题,因为家里房子的大小不相同,所以选择的尺寸也不一样,如果买的太大了家里就放不下,所以,大家一定要看一下衣柜长宽高的标准尺寸一般是多少,大家可以根据标 ...

  2. java五子棋代码详解_代码详解:Java和Valohai的深度学习之旅

    全文共10735字,预计学习时长22分钟或更长 有一款生命周期管理工具(也称云服务)叫做Valohai,它有着友好的用户界面和简洁的布局设计. 许多有关Valohai的案例和文档都是基于Python和 ...

  3. java runtime异常如何解决_成都汇智动力-Java中常见的RunTime异常及异常详解

    java.lang.ArithmeticException算术条件异常.譬如:整数除零等.java.lang.ArrayIndexOutOfBoundsException数组索引越界异常.当对数组的索 ...

  4. java注释还能运行_老师,你确定Java注释不会被执行吗?

    之前在博客上分享过一篇文章,涉及到 Java 中的注释,就信誓旦旦地写了一句话:"注释是不会被执行的!"结果,有小伙伴留言说,"老师,你确定吗?" 我这个人一直 ...

  5. java中将txt转换为数组_关于android:在Java中将列表转换为数组

    本问题已经有最佳答案,请猛点这里访问. 在Java中,如何将EDCOX1的0度转换为EDCOX1×1? 检查以下代码: ArrayList tiendas; List tiendasList; tie ...

  6. java中execution的作用_一文初步了解Java虚拟机

    大家都知道,Java中JVM的重要性,学习了JVM你对Java的运行机制.编译过程和如何对Java程序进行调优相信都会有一个很好的认知. 什么是JVM? JVM(Java Virtual Machin ...

  7. java语言用什么编程_使用什么编程语言开发Java?

    The Java Language is a language specification – you don't write a language in a language, it's a spe ...

  8. 无忧考吧2017二级java_无忧考吧二级JAVA超级模拟软件下载_无忧考吧二级JAVA超级模拟软件官方下载-太平洋下载中心...

    无忧考吧二级JAVA超级模拟软件是一款可以帮助用户朋友来学习计算机二级java语言考试的软件,使用这款二级java模拟考试软件可以帮助用户快速的掌握学习内容和操作逻辑,让你顺利的通过二级java考试. ...

  9. java 序列化概念和作用_结合代码详细解读Java序列化与反序列化概念理解

    Java序列化与反序列化是什么?为什么需要序列化与反序列化?如何实现Java序列化与反序列化?本文围绕这些问题进行了探讨. 1.Java序列化与反序列化 Java序列化是指把Java对象转换为字节序列 ...

  10. java代码删除文件夹_删除文件夹的java类

    /** * @author www.nwu.edu.cn MiniRice * @author darkrice@gmail.com * @version    1.2 * */ http://www ...

最新文章

  1. GPU加速:宽深度推理
  2. Pycharm 和 vscode 多光标、折叠代码和代码格式化快捷键
  3. 大数据教程(10.6)自定义inputFormat(小文件合并)
  4. 64 大小_32位和64位Windows系统差别在哪里
  5. 前端学习(1966)vue之电商管理系统电商系统之获取参数列表
  6. linux中demo当前目录,Linux pwd命令:显示当前路径
  7. 从苏宁电器到卡巴斯基第03篇:我的本科时光(下)
  8. window版本下载安装kafka和ZooKeeper并调试
  9. 智能卡卡发卡流程(收藏1)
  10. kubernetes配置kubeconfig访问集群
  11. flink 出现反压场景, 异常场景造成Exceeded checkpoint tolerable failure threshold.
  12. 面试经验|计算机网络面试相关知识
  13. SQL手工注入漏洞测试(Oracle数据库)
  14. 2023最新SSM计算机毕业设计选题大全(附源码+LW)之java自来水收费管理系统7yd5p
  15. 副驾驶的意义_副驾驶在飞行中的作用与地位
  16. 数据库视图创建及应用
  17. 解决steam下载的植物大战僵尸无法打开,报错Fetal error!问题
  18. C# 添加OLE到PPT幻灯片
  19. i.MX6ULL终结者官方SDK简介
  20. 红米3 android 版本,红米3四款手机有什么不同?红米3系列手机各版本区别详解

热门文章

  1. Oracle怎样导出应收开票,【Oracle|Oracle财务系统应收账款模块操作手册】
  2. 电力系统自动化远程监控方案
  3. javaweb学生选课系统
  4. 选课系统服务器,选课系统概要设计
  5. windows 10 Docker Desktop TeamTalk 安装笔记
  6. tsp 近似算法 matlab,TSP问题—近似算法
  7. HTML制作用户登录界面
  8. 单片机定时器TMOD与TCON详解!
  9. php时间戳转换英文格式日期_php把时间戳转换成英文格式
  10. [领卓教育]使用QT实现一个简单的离线词典