题解 | #查找两个字符串a,b中的最长公共子串#

查找两个字符串a,b中的最长公共子串

https://www.nowcoder.com/practice/181a1a71c7574266ad07f9739f791506

动态规划 A 、B数组各抽出一个前缀子数组,单看它们的末尾项,如果它们俩不一样——以它们俩为末尾项形成的公共子数组的长度为0:dp[i][j] = 0 如果它们俩一样,以它们俩为末尾项的公共子数组,长度保底为1——dp[i][j]至少为 1,要考虑它们俩的前缀数组——dp[i-1][j-1]能为它们俩提供多大的公共长度 如果它们俩的前缀数组的「末尾项」不相同,前缀数组提供的公共长度为 0——dp[i-1][j-1] = 0 以它们俩为末尾项的公共子数组的长度——dp[i][j] = 1 如果它们俩的前缀数组的「末尾项」相同 前缀部分能提供的公共长度——dp[i-1][j-1],它至少为 1 以它们俩为末尾项的公共子数组的长度 dp[i][j] = dp[i-1][j-1] + 1 题目求:最长公共子数组的长度。不同的公共子数组的末尾项不一样。我们考察不同末尾项的公共子数组,找出最长的那个 dp[i][j] :长度为i,末尾项为A[i-1]的子数组,与长度为j,末尾项为B[j-1]的子数组,二者的最大公共后缀子数组长度。 如果 A[i-1] != B[j-1], 有 dp[i][j] = 0 如果 A[i-1] == B[j-1] , 有 dp[i][j] = dp[i-1][j-1] + 1 base case:如果i==0||j==0,则二者没有公共部分,dp[i][j]=0 最长公共子数组以哪一项为末尾项都有可能,求出每个 dp[i][j],找出最大值。 记录下找到dp[i][j]时的i值即为nums1公共子串的结尾位置
全部评论

相关推荐

不愿透露姓名的神秘牛友
07-11 11:22
怎么这么多逆天求职者,救救我救救我救救我😭
flmz_Kk:哈哈哈哈哈哈,这么多求职者,肯定有那一两个逆天的
点赞 评论 收藏
分享
06-05 19:46
已编辑
武汉大学 后端
点赞 评论 收藏
分享
仁者伍敌:难怪小公司那么挑剔,让你们这些大佬把位置拿了
点赞 评论 收藏
分享
07-11 11:15
中南大学 Java
好可爱的hr姐姐哈哈哈哈
黑皮白袜臭脚体育生:兄弟们貂蝉在一起,吕布开了
点赞 评论 收藏
分享
评论
13
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务