8 动态规划解最长公共子串

来源:牛课题霸第127题

难度:中等

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

示例1:"1AB2345CD","12345EF"

输出:2345

求解思路:使用动态数组进行求解,如果str1.charAt(i)==str2.charAt(j)表示[i][j]这个位置可以形成子串dp[i][j]=dp[i-1][j-1]+1,并与最大值进行比较并进行记录;否则为0,

java 复制代码
public String getMaxSubString(String str1,String str2)
{
int dp[][]=new int[str1.length()][str2.length()];
if(str1.charAt(0)==str2.charAt(1))
{
dp[0][0]=1;
}
else
{
dp[0][0]=0;
}
int maxLength=0;
int maxIndex=0;
for(int i=1;i<str1.length();i++)
{
for(int j=1;j<str2.length();j++)
{
if(str1.charAt(i)==str2.charSt(j))
{
dp[i][j]=dp[i-1][j-1]+1;
maxLength=Math.max(maxLength,dp[i][j]);
maxIndex=Math.max(maxIndex,i);
}else
{
dp[i][j]=0;
}
}
}
return str1.substring(maxIndex-maxLength+1,maxIndex+1);
}

String.substring的用法是String.subString(beginIndex,endIndex);取得是beginIndex-endIndex-1之间的子串,从而我们想取到maxIndex这个元素,需要return str1.substring(maxIndex-maxLength+1,maxIndex+1);

相关推荐
武超杰4 分钟前
Spring Boot入门教程
java·spring boot·后端
左左右右左右摇晃4 分钟前
JDK 1.7 ConcurrentHashMap——分段锁
java·开发语言·笔记
是小蟹呀^8 分钟前
Java抽象类详解:从入门到精通
java·抽象类
IT 行者11 分钟前
Spring Boot 集成 JavaMail 163邮箱配置详解
java·spring boot·后端
lzhdim16 分钟前
SQL 入门 7:SQL 聚合与分组:函数、GROUP BY 与 ROLLUP
java·服务器·数据库·sql·mysql
弹简特22 分钟前
【JavaEE】Mybatis实现分页查询功能
java·java-ee·mybatis
烤麻辣烫24 分钟前
I/O流 基础流
java·开发语言·学习·intellij-idea
Jasonakeke25 分钟前
我的编程来时路
java·c++·python
Yvonne爱编码30 分钟前
Java 中的 hashCode () 与 equals () 核心原理、契约规范、重写实践与面试全解
java·开发语言·数据结构·python·hash
gelald32 分钟前
JVM - 运行时内存模型
java·jvm·后端