dp(五) 最长公共子串

news2025/1/18 10:03:09

最长公共子串_牛客题霸_牛客网

描述

给定两个字符串str1和str2,输出两个字符串的最长公共子串

题目保证str1和str2的最长公共子串存在且唯一。 

数据范围: 1≤∣str1∣,∣str2∣≤50001≤∣str1∣,∣str2∣≤5000
要求: 空间复杂度 O(n2)O(n2),时间复杂度 O(n2)O(n2)

示例1

输入:"1AB2345CD","12345EF"

返回值:"2345"

【解法一】枚举

即就是从i下标之前逐个查找最大公共串,但是无法通过提交,因为对于长串来说会超时

     string LCS(string str1, string str2) {
        // write code here
        if(str1.size()>str2.size())
        swap(str1,str2);
        int l1 = str1.size();
        // vector<int> dp(l1+1, 0);
        string res;
        for(int i = 0; i <= l1; i++)
        {
            for(int j = 0; j < i; j++)
            {
                int len = i-j;
                string temp(str1.substr(j, len));
                if(str2.find(temp)!=-1 && res.size()<len)
                {
                    res.clear();
                    res = temp;
                }                
            }
        }
        return res;
    }

【解法二】二维动规


class Solution {
public:
    string LCS(string str1, string str2) {
        // write code here
        vector<vector<int>> dp(str1.size()+1, vector<int> (str2.size()+1, 0));
        int max = 0;// 用来记录最大长度
        int pos = 0;// 用来记录公共串在str1中的终止位置
        for(int i = 1; i <= str1.size(); i++)
        {
            for(int j = 1; j <= str2.size(); j++)
            {
                // i、j都从1开始  str1和str2访问i、j下标都要进行-1操作 
                if(str1[i-1] == str2[j-1])
                    dp[i][j] = dp[i-1][j-1]+1;
                else
                    dp[i][j] = 0;
                if(dp[i][j] > max)
                {
                    max = dp[i][j];
                    pos = i-1;
                }
            }
        }
        return string(str1.substr(pos-max+1, max));
    }
};

【解法三】滚动数组思想优化


class Solution {
public:
    string LCS(string str1, string str2) {
        // write code here
        vector<int> dp(str2.size()+1, 0);
        int pos = 0;
        int max = 0;
        for(int i = 1; i <= str1.size(); i++)
        {
            // 注意这里需要从后往前更新,因为要使用到之前的值
            for(int j = str2.size(); j >= 1; j--)
            {
                if(str1[i-1] == str2[j-1])
                dp[j] = dp[j-1] + 1;
                else
                dp[j] = 0;
                if(dp[j] > max)
                {
                    max = dp[j];
                    pos = i-1;
                }
            }
        }
        return string(str1.substr(pos-max+1, max));
    }
};

#include <iostream>
using namespace std;
#include<vector>

int main() 
{
    string str1,str2;
    cin>>str1;
    int pos = str1.find(',');
    str2 = str1.substr(pos+1);
    str1 = str1.substr(0, pos);
    int max = 0;
    vector<int> dp(str1.size()+1, 0);
    for(int i = 1; i <= str1.size(); i++)
    {
        for(int j = str2.size(); j >= 1; j--)
        {
            if(str1[i-1] == str2[j-1])
            dp[j] = dp[j-1]+1;
            else
            dp[j] = 0;
            if(dp[j] > max)
            max = dp[j];
        }
    }
    cout<<max<<endl;
    return 0;
}
// 64 位输出请用 printf("%lld")

 

描述

给定两个字符串,请编写代码,输出最长公共子串(Longest Common Substring),是指两个字符串中的最长的公共子串,要求子串一定是连续。

数据范围:输入的两个字符串长度满足 1≤n≤100 1≤n≤100 

输入描述:

文本格式,2个非空字符串(字母数字组成),2个字符串以","英文逗号分割。

输出描述:

整形,为匹配到的最长子串长度

示例1

输入:

bab,caba

输出:

2

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/161845.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【阶段三】Python机器学习22篇:机器学习项目实战:GBDT分类模型

本篇的思维导图: 项目实战(GBDT分类模型) 项目背景 应用GBDT算法实现多分类模型,目标是实现GBDT多分类项目的全流程。 数据获取 本次建模数据来源于网络,数据项统计如下: 编号  变量名称 <

聚焦:XuperOS成长计划FAQ

1月12日&#xff0c;百度超级链发布XuperOS成长计划&#xff08;&#x1f449;XuperOS 新年致辞&#xff1a;创世、监督、共建、国际&#xff09;。以下是我们整理的关于成长计划的常见问题&#xff0c;为关心XuperOS的广大朋友答疑解惑。问&#xff1a;XuperChain除了发行这四…

662. 二叉树最大宽度

662. 二叉树最大宽度 难度中等530 给你一棵二叉树的根节点 root &#xff0c;返回树的 最大宽度 。 树的 最大宽度 是所有层中最大的 宽度 。 每一层的 宽度 被定义为该层最左和最右的非空节点&#xff08;即&#xff0c;两个端点&#xff09;之间的长度。将这个二叉树视作…

IT信息化推进那么难,为什么,怎么办 ?

IT信息化推进除了管理层的支持外&#xff0c;更重要的是要赢得业务的支持。但往往业务方有时会排斥IT信息化&#xff0c;这里面有很多的原因&#xff0c;比如&#xff1a;不懂业务的想法难沟通&#xff1b;系统不好用、体验不好、问题太多&#xff0c;不想用。换一波IT团队&…

华为双点双向路由引入实验配置

配置接口IP地址&#xff0c;建立相关的路由邻居 然后在AR2上将ISIS引入OSPF&#xff08;isis-ospf&#xff09;&#xff0c;将OSPF引入ISIS&#xff08;ospf-isis&#xff09; 然后在AR4上将ISIS引入OSPF&#xff08;isis-ospf&#xff09;&#xff0c;将OSPF引入ISIS&#x…

【Electron】解决 npm安装出现 self-signed certificate in certificate

问题 按照Electron 官网步骤安装时 npm install electron --save-dev出现报错 error RequestError: self-signed certificate in certificate chain 解决 解决方式1&#xff1a; 优先尝试 git config --global http.sslVerify false npm set strict-ssl false解决方式2&…

【写作能力提升】“5种搭建⽂章架构的⽅法”免费赠送!

“ 【写作能力提升】系列文章&#xff1a; 为什么建议你一定要学会写作? “5 种搭建⽂章架构的⽅法”免费赠送! 写作小白需要避免的五个写作误区和灵魂五问 ”一、前言 Hello&#xff0c;我是小木箱&#xff0c;今天主要分享的内容是: 5 种搭建⽂章架构的⽅法! 大家普遍有一个…

【jQuery】常用API——jQuery元素操作

jQuery元素操作主要是遍历、创建、添加、删除元素操作。一、遍历元素 jQuery 隐式迭代是对同一类元素做了同样的操作。 如果想要给同一类元素做不同操作&#xff0c;就需要用到遍历。 主要用于DOM处理$("div").each(function (index, domEle) { xxx; });each&#xf…

c++11 标准模板(STL)(std::forward_list)(七)

定义于头文件 <forward_list> template< class T, class Allocator std::allocator<T> > class forward_list;(1)(C11 起)namespace pmr { template <class T> using forward_list std::forward_list<T, std::pmr::polymorphic_…

分享57个Python源码,总有一款适合您

Python源码 分享57个Python源码&#xff0c;总有一款适合您 57个Python源码下载链接&#xff1a;https://pan.baidu.com/s/1YZcrJAYFFy3OrdEN5IxnQQ?pwd6666 提取码&#xff1a;6666 采集代码下载链接&#xff1a;采集代码.zip - 蓝奏云 下面是文件的名字&#xff0c;我放…

Cadence Allegro 全局布线GRE规划应用及参数设置

GRE是Global Route Environment的缩写,中文意思为全局布线环境,运用具备阶层化意识的全面绕线引擎与图形式互连流程规划程序。通GRE技术在短时间就可以开发出包含众多互连总线与芯片引脚数的复杂且高速的设计组件。此外,运用GRE技术后便于工程师实现更佳的功能密度与系统效能…

ZYNQ-IP核封装笔记

step1&#xff1a;新建文件 将源码放进src中 step2&#xff1a;新建IP location&#xff08;可以多次使用&#xff0c;下次无需创建&#xff09; 点击“ Finish”之后&#xff0c; Vivado 会新建一个名为“ Manage IP”的工程&#xff0c; IP_produce就是我管理IP核的一个空…

【高级Java开发】类QQ聊天工具的设计与实现(代码已上传)

1、要求类QQ聊天工具的设计与实现&#xff0c;要求如下&#xff1a;用户可注册并通过密码录登。用户可通过查找添加自己的好友。用户可通过好友列表选择好友并与之对话。需实现聊天记录查看功能。界面美观大方&#xff0c;交互设计尽量参考QQ。代码结构合理&#xff0c;可复用性…

openGauss2.0.0之Java简单测试Sequence

openGauss2.0.0之Java测试Sequence一、实验环境二、实验目标二、实验步骤一、实验环境 项目Value操作系统openEuler服务器华为云弹性云服务器ECS 1 台 2核心 4GB内存数据库openGauss2.0.0 单机部署 二、实验目标 目标 学习openGauss2.0.0的序列的使用&#xff0c;熟悉JDBC编程方…

(10)QWidget的使用(one)

目录 QWidget的大小和位置 获取QWidget的大小和位置 设置QWidget的大小和位置 设置窗口固定大小 限定窗口的大小 坐标系统转换 内容边距 鼠标指针 鼠标指针的形状 自定义光标的使用 获取和设置光标的坐标 QWidget类是所有可视控件的基类&#xff0c;控件是用户界面…

【C进阶】内存函数

家人们欢迎来到小姜的世界&#xff0c;<<点此>>传送门 这里有详细的关于C/C/Linux等的解析课程&#xff0c;家人们赶紧冲鸭&#xff01;&#xff01;&#xff01; 客官&#xff0c;码字不易&#xff0c;来个三连支持一下吧&#xff01;&#xff01;&#xff01;关注…

Spring知识点记录

Spring知识点1. Spring简介&#xff08;此章略过&#xff09;1.1 Spring概述1.2 Spring家族1.3 Spring Framework2. IOC2.1 IOC容器2.2 基于XML管理bean2.2.1 入门案例&#xff08;ioc容器的整体思路&#xff09;2.2.2 获取bean的三种方式2.2.3 依赖注入2.2.3.1 setter注入2.2.…

指针数组与数组指针---傻傻分不清楚?

目录1.指针数组2.数组指针1.指针数组 什么是指针数组呢&#xff1f; 我们通过以前学过的数组进行类比&#xff1a; 整形数组是存放整形的数组字符数组是存放字符的数组所以&#xff0c;指针数组是存放指针(地址)的数组 整形数组的书写形式是int arr[10]&#xff0c;字符指针…

uniapp兼容小程序和H5遇见的坑

目录 一、报错 vue service.requestcomponentinfo:typeerror:cannot read property matches undefined H5不兼容uni-app的image标签 小程序externalClasses不兼容h5 H5不兼容van-picker和van-datetime-picker 一、报错 vue service.requestcomponentinfo:typeerror:cannot r…

【C语言进阶】 一篇带你掌握字符串和内存函数

目录一&#xff1a;strlen模拟实现&#xff1a;二&#xff1a;strcpy模拟实现&#xff1a;三&#xff1a;strcat模拟实现&#xff1a;四&#xff1a;strcmp模拟实现&#xff1a;五&#xff1a;strncpy模拟实现&#xff1a;六&#xff1a;strncat模拟实现&#xff1a;七&#xf…