[牛客题霸-研发] NC127-最长公共子串

【图像超分】论文精读:Interpreting Super-Resolution Networks with Local Attribution Maps(LAM) 论文题目:Interpreting Super-Resolution Networks with Local Attribution Maps —— 用局部归因图解释超分辨率网络CVPR 2021!必读文章!必须会的可视化手段!很多文章中都会对比LAM!图像超分辨率 (SR) 技术发展迅速,受益于深度网络的发明及其连续突破。然而,众所周知,深度学习和深度神经网络很难解释。SR网络继承了这种神秘的性质,很少有作品试图理解它们。在本文中,我们对 SR 网络进行了归因分析。 阅读详情

[牛客题霸-研发] NC127-最长公共子串

----------------------------------------------本题链接----------------------------------------------

题目描述

给定两个字符串str1和str2,输出两个字符串的最长公共子串,如果最长公共子串为空,输出-1。

示例

输入
"1AB2345CD","12345EF"

返回值
"2345"

思路

动态规划问题
假设两个字符串长度为n、m,具体分析其问题:

  1. 最优子结构:如果知道 n-1、m-1 长度字符串的最长公共子串s,则 n、m 长度字符串最长公共子串为 s+1(当最后字符相同时) 或者 s(当最后字符不同时)
  2. 重叠子问题:为确定 n、m 长度字符串最长公共子串,需要知道n-1、m-1 长度字符串的最长公共子串;为确定 n-1、m-1 长度字符串最长公共子串,需要知道n-2、m-2 长度字符串的最长公共子串。。。
  3. 状态转移方程:
    d p ( n , m ) = { 0 , n = 0 o r m = 0 d p ( n − 1 , m − 1 ) + 1 , n > 0 & m > 0 dp(n, m)=\left\{ \begin{aligned} & 0 ,& n=0 \quad or \quad m =0\\ & dp(n-1,m-1) + 1 ,& n>0 \quad \& \quad m > 0 \\ \end{aligned} \right. dp(n,m)={​0,dp(n−1,m−1)+1,​n=0orm=0n>0&m>0​

如何列出正确的状态转移方程:

  1. 确定「base case」: 某一字符串为空时,匹配不到公共子串,返回0
  2. 确定「状态」 (也就是原问题和子问题中会变化的变量):两个字符串的长度会不断向 base case 靠近,所以「状态」就是两个字符串的长度
  3. 确定「选择」(也就是导致「状态」产生变化的行为):我们每拿出一个字符进行匹配,就越离我们的目标找到最长公共子串越接近。
  4. dp数组的定义:输入两个字符串长度,返回当前最长公共子串长度

推荐大佬总结的动态规划问题:labuladong的算法小抄

算法过程

  1. 判断异常情况
  2. 初始化dp数组
  3. 做选择
  4. 满足条件则更新dp数组,同时记录最长公共子串长度和初始位置
  5. 确定最长公共子串

解答

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) {
        if(str1 == null || str2 == null || str1.equals("") || str2.equals(""))
            return "-1";
        
        int m = str1.length(), n = str2.length(), res = 0, pos = 0;
        // 初始化dp
        int[][] dp = new int[m+1][n+1];
        
        for(int i = 1; i <= m; i++){
            char c1 = str1.charAt(i-1);
            for(int j = 1; j <= n; j++){
                char c2 = str2.charAt(j-1);
                if(c1 == c2){
                    dp[i][j] = dp[i-1][j-1] + 1;
                    if(dp[i][j] > res){
                        res = dp[i][j];
                        pos = i;
                    }
                }
            }
        }
        return res == 0 ? "-1" : str1.substring(pos - res, pos);
    }
}
手把手教你用ESP32-C3打造智能聊天机器人-立创实战派 本文将详细介绍如何利用立创ESP32-C3开发板,烧录小智AI程序,快速实现一个功能强大的聊天机器人。 阅读详情

相关推荐

数仓 - 促销敏感度、评论敏感度

1. 促销敏感度 步骤1. 首先按照最后一次下单时间及有无复购情况将用户分为四大群体: 近一年有购物行为且复购的用户 -- L1 (今年复购用户) 近一年有购物行为但无复购的用户 --L2 (今年一单购用户) 最后一次下单时间在1年之前且有复购的用户 --L3 (今年无购且只有一单用户) 最后一次下单时间在1年之前但无复购的用户 -- L4 (今年无购多单用户) 步骤2. 每一类用户群再根据优惠订单占比、每单优惠金额占比的平均值、优惠金额这三个指标进行k-means聚类,分为: 非常敏感 -

weixin_41332009的博客 1898

牛客NC127-最长公共子串

在这里插入代码片

肉夹馍的博客 302

AGX Orin 部署PyTorch与Torchvision 2026避坑指南

本文提供了2026年在AGX Orin开发板上部署PyTorch与Torchvision的详细避坑指南。针对ARM64架构和JetPack 6.2系统,重点解决了Python 3.10环境配置、官方wheel包安装、torchvision源码编译等关键步骤,并分享了常见问题解决方案和性能优化技巧,确保深度学习环境稳定运行。

sky77的博客 752

牛客题霸题目及题解汇总

牛客题霸 车站建造问题 C++题解/答案

qq_35975367的博客 1304

K8S证书过期解决办法之替换证书

k8s证书过期解决方案之替换证书

q_hsolucky的博客 1万+

实体对齐(Entity Alignment)相关论文与数据集整理

实体对齐(Entity Alignment)、知识图谱融合方法总结整理 年份 模型 主要思想 博文推荐 论文 代码 2019 Entity Alignment between Knowledge Graphs Using Attribute Embeddings 实体对齐数据集整理 名称 — DBpe-dia(DBP) LinkedGeoData(LGD) Geonames(GEO) YAGO ...

bjxxkjdxcdd的博客 1万+

牛客题霸 51 - 60

文章目录51. 获取Employees中的first_name,查询按照first_name最后两个字母,按照升序进行排列54. 查找排除最大、最小salary之后的当前(to_date = '9999-01-01' )员工的平均工资avg_salary。55. 使用含有关键字exists查找未分配具体部门的员工的所有信息。 51. 获取Employees中的first_name,查询按照first_name最后两个字母,按照升序进行排列 思路:使用字符串截取函数 subtring(对象字符串,截取的起始位

Charison的编程妙妙屋 221

CodeBlocks如何将英文环境改为中文

一、下载汉化包(链接如下) 链接:https://pan.baidu.com/s/166U9WGPbJXu2hyD7q9EiJQ 提取码:2333 二、选择路径 将汉化包中的文件(CodeBlocks.mo、zh_CN.mo、zh_CN.po)放到CodeBlocks安装路径下的​​​​​​CodeBlocks/share/CodeBlocks/locale/zh_CN文件夹中,路径中的文件夹没有就新建。 注:此处需严格按照要求来,切勿自定义文件夹名 三、内部调试 打开CodeBlocks,..

云隐雾匿的博客 2万+

牛客题霸-算法篇

记录牛客题霸中的各种算法题

qq_43217697的博客 327

of_graph_get_remote_port

isp { compatible = "isp"; core@0 { id = <0>; ports { #address-cells = <1>; #size-cells = <0>; port@0 { reg = <0>; ...

wmzjzwlzs的专栏 1163

一篇把 Transport 做到可复制的实战指南:从 CTS 底层表到 LSMW、Variant、Layout、TABU、Query、SAPscript 全对象搬运

本文深入解析SAP系统中的Transport机制,将其视为可审计、可追溯的变更流水线。文章从CTS/Transport Organizer通用方法论和具体对象搬运手法两个层面展开,详细介绍了LSMW项目、程序Variant、屏幕/ALV Layout、表数据、ABAP Query、SAPscript和SO10标准文本等对象的传输策略。通过真实案例说明,代码对象往往能被正确传输,但"运行体验"和"业务配置"却常被遗漏,导致QAS测试正常而PRD环境异常。文章提供了一套可

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 169

NC127—最长公共子串

题意 给定两个字符串str1和str2,输出两个字符串的最长公共子串,如果最长公共子串为空,输出-1。 题解 思路与最长公共子序列类似,dp[i][j]表示以str1[i]和str2[j]为最后一个元素的最长公共子串的长度,只不过状态转移方程稍微变化,如果str[i] != str[j],dp[i][j] = 0 class Solution { public: /** * longest common substring * @param str1 string字符串 the

fkuner的博客 278

WinCC 7.5 读取 SQL server2016 中的表格数据

环境 win10 SQL Server 2016 WinCC V7.5 SP2 1 安装SQL Server 2016 2 选择服务器名称 .\WINCC 3 建数据库

skr? 7139

牛客题霸-SQL篇(刷题记录二)

本文基于前段时间学习总结的 MySQL 相关的查询语法,在牛客网找了相应的 MySQL 题目进行练习,以便加强对于 MySQL 查询语法的理解和应用。以下内容是牛客题霸-SQL 篇的第 223 - 262 道题目的 MySQL 代码答案,本文跳过了其中一些更新、删除、修改等操作的题目。由于涉及到的数据库表较多,因此本文不再展示,只提供 MySQL 代码与示例输出。

大面鱼的博客 2882

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

【牛客题霸——模板速刷TOP101】:BM1 反转链表(难度:【简单】)

在遍历链表时,将当前节点的next 指针改为指向前一个节点。最后返回新的头引用。给定一个单链表的头结点pHead(该头节点是有值的,比如在下图,它的val是1),长度为n,反转该链表后,返回新链表的表头。把链表节点一个个入栈,当全部入栈完之后再一个个出栈,出栈的时候在把出栈的结点串成一个新的链表。把原链表的结点一个个摘掉,每次摘掉的链表都让他成为新的链表的头结点,然后更新新链表。经反转后,原链表变为{3,2,1},所以对应的输出为{3,2,1}。要求:空间复杂度 O(1),时间复杂度 O(n)。

栗子冰的博客 483

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

牛客题霸-SQL入门篇(刷题记录一)

本文基于前段时间学习总结的 MySQL 相关的查询语法,在牛客网找了相应的 MySQL 题目进行练习,以便加强对于 MySQL 查询语法的理解和应用。以下内容是牛客题霸-SQL基础篇的前 20 道题目的答案。

大面鱼的博客 1048

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

每日一题---买卖股票的最好时机(一)、(二)

因为本题只能买入和卖出一次,所以我们首先可以先定义两个变量max(用来记录利润最大值),min(用来记录当天之前的最低价格)并将第一天的价格赋值给min,然后遍历数组,每进行一次for循环,比较max和当天价格减去min的最大值,将较大的赋值给max,接下来比较min与当天价格的最小值,并赋值给min。这种策略有时能够显著提高算法的效率,因为它减少了计算的复杂度,但同时也意味着贪心算法只能应用于那些通过局部最优解可以确保全局最优解的问题‌。总而言之,如果价格上升,res加上差值,否则直接跳过。

huangtiandi11的博客 2万+

牛客题霸:TH33 找出重复的数

我们可以将序列a看作一个链表,其中每个元素都是一个节点,每个节点都有一个指向下一个节点的指针。我们可以使用二分查找来查找链表中的中间节点,然后将链表分成两部分。如果中间节点的值等于其前一个节点的值,那么重复的数就在左半部分。否则,重复的数就在右半部分。这个解决方案的时间复杂度为O(nlogn),因为我们需要使用二分查找来查找链表中的中间节点。在包含 n+1 个数的序列 a 中找出重复的数。序列 a 中包含从 1 到 n 的整数,且只有一个数有重复值。要求时间复杂度为 O(n),额外空间复杂度为 O(1)。

倚楼听风雨的博客 551

0动态规划中等 牛客NC.127最长公共子串

NC.127最长公共子串 题目描述 给定两个字符串str1和str2,输出两个字符串的最长公共子串,如果最长公共子串为空,输出-1。 示例1 输入"1AB2345CD",“12345EF” 返回值"2345" 思路 以两个字符串的长度建立一个二维数组(如下图),遍历两个字符串。 dp[i][j]表示以str1第i个字符结尾和以str2第j个字符结尾的最长公共子串 dp[i][j]在dp[i-1][j-1]得到 import java.util.*; public class Solution {

31楼下小黑的博客 180

牛客题霸30题题解汇总

1.牛客题霸NC61两数之和Java题解 牛客:https://blog.nowcoder.net/n/a721021e29b4487ba7db2b4d65b56294 优快云:https://blog.youkuaiyun.com/weixin_44706512/article/details/110095181 博客园:https://www.cnblogs.com/yunfeiyang2020/p/14032558.html 2.牛客题霸NC78反转链表Java题解 牛客:https://blog.nowco

云飞扬°的博客 798

牛客网编程高频题22——NC127最长公共子串

最长公共子串 描述 给定两个字符串str1和str2,输出两个字符串的最长公共子串 题目保证str1和str2的最长公共子串存在且唯一。 示例1 输入: "1AB2345CD","12345EF" 复制返回值: "2345" 复制 备注: 1 \leq |str_1|, |str_2| \leq 5\,0001≤∣str1​∣,∣str2​∣≤5000 ...

小唐要努力的博客 214

NC127 最长公共子串

描述 给定两个字符串str1和str2,输出两个字符串的最长公共子串 题目保证str1和str2的最长公共子串存在且唯一。 思路: 最长公共子串,不是最长公共子序列,子序列可以是不连续的,但子串一定是连续的。 定义dp[i][j]表示字符串str1的第i个字符结尾、str2的第j个字符结尾时,最长公共子串。 注意点:需要多申请一行+一列,初始化为0,dp[i+1][j+1]=dp[i][j]+1//不累计 class Solution { public: /** * longest.

香蕉的博客 361

【牛客题霸】语法篇 - C++入门72题

数字和基本语法 cpp2. double小数转int整数,四舍五入 double a; int b = a; 会直接输出a的整数部分。 考点:负数;小数点后没有数字 方法一:round函数 四舍五入到最邻近的整数 需要额外 #include<math.h> #include<math.h> round(1.56)=2.000000 round(-1.99)=-2.000000 方法二:直接写 double x; int y; if(d>=0) y = d+0.5; e

qdsn的博客 4743

牛客题霸-SQL篇(刷题记录三)

本文基于前段时间学习总结的 MySQL 相关的查询语法,在牛客网找了相应的 MySQL 题目进行练习,以便加强对于 MySQL 查询语法的理解和应用。以下内容是牛客题霸-SQL 篇的第 263 - 275 道题目的 MySQL 代码答案。由于涉及到的数据库表较多,因此本文不再展示,只提供 MySQL 代码与示例输出。

大面鱼的博客 1549

leetcode-牛客网-NC127 最长公共子串-连续的子串

一、题目 二、思路 1、求的的是两个字符串的公共子串,子串是连续的 2、构建二维动态数组,记录最长的子串,都初始化为0 3、当两个字符相等时,dp[i][j]=dp[i-1][j-1]+1; 4、实时比较最长的子串,记录子串的最后一位的下标 三、代码 class Solution { public: /** * longest common substring * @param str1 string字符串 the string * @param str2 strin

weixin_45794299的博客 408

牛客题霸 1 - 10

文章目录数据库表格1. 查找所有最晚入职员工的信息2. 查找入职员工时间排名倒数第三的员工的所有信息3. 查找各个部门当前领导当前薪水详情以及其对应部门编号dept_no4. 查找所有已经分配部门的员工的last_name和first_name5. 查找所有员工的last_name和first_name以及对应部门编号dept_no,也包括暂时没有分配具体部门的员工6. 查找所有员工入职时候的薪水情况,给出emp_no以及salary, 并按照emp_no进行逆序7. 查找薪水涨幅超过15次的员工号emp_

Charison的编程妙妙屋 352
上一篇: [牛客题霸-研发] NC53-删除链表的倒数第n个节点
下一篇: [牛客题霸-研发] NC51-合并k个已排序的链表
Coder_JC_Liu
博客等级 码龄7年 2粉丝 30原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值