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);

相关推荐
MediaTea32 分钟前
AI 术语通俗词典:C4.5 算法
人工智能·算法
Navigator_Z42 分钟前
LeetCode //C - 1033. Moving Stones Until Consecutive
c语言·算法·leetcode
WBluuue44 分钟前
数据结构与算法:莫队(一):普通莫队与带修莫队
c++·算法
callJJ1 小时前
Spring Data Redis 两种编程模型详解:同步 vs 响应式
java·spring boot·redis·python·spring
风筝在晴天搁浅1 小时前
n个六面的骰子,扔一次之后和为k的概率是多少?
算法
wbs_scy2 小时前
Linux线程同步与互斥(三):线程同步深度解析之POSIX 信号量与环形队列生产者消费者模型,从原理到源码彻底吃透
java·开发语言
MATLAB代码顾问3 小时前
Python实现蜂群算法优化TSP问题
开发语言·python·算法
代码飞天3 小时前
机器学习算法和函数整理——助力快速查阅
人工智能·算法·机器学习
jiushiapwojdap3 小时前
LU分解法求解线性方程组Matlab实现
数据结构·其他·算法·matlab
jinanwuhuaguo3 小时前
(第三十三篇)五月的文明奠基:OpenClaw 2026.5.2版本的文明级解读
android·java·开发语言·人工智能·github·拓扑学·openclaw