描述

给定两个字符串str1和str2,输出两个字符串的最长公共子串
题目保证str1和str2的最长公共子串存在且唯一。

方法1:dp数组存子串

import java.util.*;

public class Solution {
/**
* longest common substring
* @param str1 string字符串 the string
* @param str2 string字符串 the string
* @return string字符串
*/
public String LCS (String str1, String str2) {
int len1 = str1.length(), len2 = str2.length();
String[][] dp = new String[len1 + 1][len2 + 1]; //为何初始化为len+1,相当于从1-n
int max = 0;
String res = "";
for(int i = 0; i <= len1; i++) {
for(int j = 0; j <= len2; j++) {
if(i == 0 || j == 0) {
dp[i][j] = "";
} else if(str1.charAt(i - 1) == str2.charAt(j - 1)) {
dp[i][j] = dp[i - 1][j - 1] + str1.charAt(i - 1);
if(dp[i][j].length() > max) {
max = dp[i][j].length();
res = dp[i][j];
}
} else {
dp[i][j] = "";
}
}
}
return res;
}
}

类似题目:NC92 最长公共子序列(二)

方法2:dp数组存公共串长度

public static String LCS (String str1, String str2) {
int len1 = str1.length(), len2 = str2.length();
int[][] dp = new int[len1 + 1][len2 + 1];
int max = 0;
int index = 0;
for(int i = 0; i < len1; i++) {
for(int j = 0; j < len2; j++) {
if(str1.charAt(i) == str2.charAt(j)) {
dp[i + 1][j + 1] = dp[i][j] + 1;
}
if(dp[i + 1][j + 1] > max) {
max = dp[i + 1][j + 1];
index = i;
}
}
}
return str1.substring(index - max + 1, index + 1);
}

最新文章

  1. struts2类型转换
  2. vue.js之绑定class和style
  3. SAM4E单片机之旅——24、使用DSP库求向量数量积
  4. jsp前三章测试改错题
  5. 【C#】【Thread】Semaphore/SemaphoreSlim信号量
  6. tcp ip detatils
  7. Json.Net学习(1) 实现简单的序列化和反序列化
  8. CSS之照片翻转
  9. php错误消息捕获
  10. 自定义UINavigationItem的两种方法以及相应的隐藏方法
  11. 怎样设制 select 不可编辑 仅仅读
  12. 使用C#实现DHT磁力搜索的BT种子后端管理程序+数据库设计(开源)
  13. 动态样式语言—LESS
  14. JAVA异步加回调的例子
  15. 28 Python初学(事件驱动模型)
  16. CSS实现单行、多行文本超出部分显示省略号
  17. Linux 命令整理-ps
  18. Python小练习之判断一个日期是一年的第几天
  19. ruby 知识点随笔
  20. #WEB安全基础 : HTTP协议 | 0x7 学会使用wireshark分析数据包

热门文章

  1. CentOS7下的lvm(逻辑卷)在线扩容
  2. Gitlab备份以及恢复
  3. webpack打包思路与流程解析
  4. P1399 [NOI2013] 快餐店 方法记录
  5. hibernate validation 手动参数校验 不经过spring
  6. linux安装达梦数据库8
  7. Linux学习记录---(1、基本命令)
  8. Spark基本知识
  9. 中小型企业综合项目(Nginx+LVS+Tomcat+MGR+Nexus+NFS)
  10. 【lwip】07-链路层收发以太网数据帧源码分析