Longest Common Substring

2023-11-17

给出两个字符串,找到最长公共子串,并返回其长度。

 注意事项

子串的字符应该连续的出现在原字符串中,这与子序列有所不同。

 Lintcode上的一道题目,非常经典,需要找到最长的连续公共子串的长度。

因为有两个序列且前后顺序不可以打乱,所以为双序列问题。

这种问题比较重要的是定义状态。这里将状态f[i][j]定义为以A的第i 个字符和B的第j个字符为结尾的最长公共子串的长度。如果A[i-1]!=B[j-1],则f[i][j]=0。

如果A[i-1]==B[j-1],则f[i][j] =f[i-1][j-1]+1。代码如下:

class Solution:
    # @param A, B: Two string.
    # @return: the length of the longest common substring.
    def longestCommonSubstring(self, A, B):
        if not A or not B:
            return 0
        res = [[0 for i in xrange(len(B)+1)] for j in xrange(len(A)+1)]
        maxlen = 0
        for i in xrange(1,len(A)+1):
            for j in xrange(1,len(B)+1):
                if A[i-1] == B[j-1]:
                   res[i][j] = res[i-1][j-1]+1
                   maxlen = max(res[i][j],maxlen)
                else:
                   res[i][j] = 0
        return maxlen

时间复杂度O(mn),空间复杂度也为O(mn)。和之前的空间复杂度为O(mn)的题目一样,这题的空间复杂度可以优化为O(min(m,n))甚至是O(1)。O(1)解法是按照对角线和对角线的平行线来扫。

转载于:https://www.cnblogs.com/sherylwang/p/5531366.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Longest Common Substring 的相关文章

  • 基于Python的微博舆论分析,微博情感分析可视化系统(V2.0)

    简介 Python基于微博的舆情分析 情感分析可视化系统 微博舆情分析系统 项目后端分爬虫模块 数据分析模块 数据存储模块 业务逻辑模块组成 功能包括 登陆注册 用户管理 热门事件展示 舆情分析 包括舆情分析 情感分类 用户分布 关键词云图
  • 逆向爬虫-sojson混淆反调加密

    文章目录 一 获取sojson代码 二 sojson加密特点和原理 三 过sojson姿势方法 3 1 格式化正则释义 3 2 网页调试过sojson 3 3 静态文件替换过sojson 一 获取sojson代码 JS加密混淆 本次使用代码
  • 阶段性回顾

    阶段笔记 Day01 1 请你简单介绍下软件开发中系统架构的演变 单一应用 gt 垂直拆分 gt 分布式服务 gt 服务治理 SOA gt 微服务架构 2 远程调用的方式有几种 他们的区别如何 如何选择 远程调用有两种方式 RPC Remo
  • 编程每日一题_C程序设计_两整型数据求和

    问题描述 Calculate a b 问题来源https zoj pintia cn problem sets 91827364500 problems Time Limit 2000 ms Memory Limit 65536 KB In
  • HTML5做移动开发一定要搞明白MPA 与 SPA 的差别

    用HTML5做WEB与移动开发一定要搞明白MPA 与 SPA 的差别 刚开始可能会不明白 为什么习惯pc端web app开发 会发现Sencha Touch这样的框架 用起来有点别扭 老在想那熟悉的多页面开发方式 却总也找不到实现的接口 也
  • Mac系统下Flutter安装教程

    一 下载Flutter 1 第一种方式git repo方式 执行下列命令下载最新的flutter代码 系统请先安装Git git clone b beta https github com flutter flutter git 2 第二种
  • 如何解决:ConnectionRefusedError: [WinError 10061] 由于目标计算机积极拒绝,无法连接。

    如何解决 ConnectionRefusedError WinError 10061 由于目标计算机积极拒绝 无法连接 在阅读 Python编程 从入门到实践 17 1 6时遇到了这个问题 项目场景 import requests url
  • spyglass使用教程

    spyglass使用教程 ic 爱好者的博客 CSDN博客
  • vivo手机计算机恢复出厂设置,vivo手机系统恢复出厂设置里面清除所有数据

    哎呀 手机怎么又卡了 完了这局农药又要输了 这个破手机 才用了一年就卡的不要不要的了 是时候要通过恢复出厂设置来解决了 但它真的能让我们的手机变流畅吗 什么是恢复出厂设置 顾名思义 恢复出厂设置就是将手机里所有的设置还原到最开始时的状态 就
  • [网络安全自学篇] 三.Burp Suite安装配置、Proxy基础用法及流量分析示例

    最近开始学习网络安全相关知识 接触了好多新术语 感觉自己要学习的东西太多 真是学无止境 也发现了好几个默默无闻写着博客 做着开源的大神 接下来系统分享一些网络安全的自学笔记 希望读者们喜欢 上一篇文章分享了Chrome浏览器保留密码功能渗透
  • vue的transition动画条上下跳动

    vue部分
  • Dynamics 365 DevOps CI/CD之ConfigurationData

    ConfigurationData如省市区 门店地址这种业务类型的数据 还有系统自定义过程中配置或开发涉及的参数 需要在系统间进行同步 此处CI用到了Power Platform Tool这个工具 这个也是可以在Azure DevOps的商
  • 进度条程序

    package progressbar import java awt BorderLayout import java awt Container import java awt Dimension import java util Ar
  • java中FileReader的使用

    package com test io01 import java io File import java io FileNotFoundException import java io FileReader import java io
  • TTreeNode编程思路

    导读 TTreeNode编程思路 本问以TreeView为例子讲述 其他的用到TTreeNodes的控件的编程思想如出一辙 TreeView由节点构成 建树通过对TreeView items属性进行操作 Items是一个TTreeNodes
  • Redis 配置文件最佳解析

    配置文件 https raw githubusercontent com redis redis 7 0 redis conf 通用模板 引入 include 用于引入其他配置文件 支持使用通配符 根据从上到下的顺序 读取配置项 对同一个配
  • 解决vite首次加载很慢的问题

    目录 vite很快吗 为什么说vite快 为什么说vite慢 解决方案 附加 vite很快吗 vite要比webpack快 是的 真的很快 但个人感受 默认情况下 vite项目的启动确实比webpack快 但如果某个界面是首次进入 且依赖比
  • LaTex希腊字母大全

    小写字母 LaTex指令 大写字母 LaTex指令 alpha alpha A A
  • MySql修改主键字段

    一 应用实例 去除原来的主键字段的主键 ALTER TABLE mdm customer DROP PRIMARY KEY 新增字段并设置为主键 ALTER TABLE mdm customer ADD ID int 32 PRIMARY
  • 【图像处理】数码相机工作原理完整解析

    在过去二十年里 消费电子产品的大多数重要技术突破实际上可归结于一项更大意义上的科技革命 仔细观察就会发现 CD DVD 高清电视 MP3和DVR其实都是基于相同的原理 即 将传统的模拟信息转变为数字信息 这一技术上的根本转变完全颠覆了我们处

随机推荐

  • Tomcat中server.xml中访问多个项目的配置

    Tomcat中server xml中访问多个项目的配置 server xml作为 tomcat 启动时的配置依据 其功能包含了配置访问端口 访问路径等 这里主要针对在同一个 tomcat 中发布多个项目 其中最关键的配置是 标签下appBa
  • 码农的自我修养 - ARM编译器的区分

    在嵌入式软件开发的编码中 有时使用的一些指令是和编译器相关的 这时就要判断当前使用的编译器类型 不同的编译器 会定义不同的宏来进行识别 比如在ARM开发工具包中 cortex M系列开发中 CMSIS Cortex Mx Core Peri
  • SSH工作原理&Ubuntu20.04安装并配置SSH&设置SSH免密登录

    目录 一 SSH的介绍 服务器端 客户端 1 SSH 远程连接工具 连接原理 2 SSH的安全机制 3 两种级别的验证方法 登录方法 二 ssh的安装与启动 1 安装 2 启动服务器的SSH服务 三 SSH客户端 1 前置知识 2 口令登录
  • 最新版SpringBoot整合Mybatis,实现增删改查(CRUD)

    SpringBoot整合Mybatis实现增删改查 文章目录 SpringBoot整合Mybatis实现增删改查 前言 第一 创建MySQL数据库 第二 创建SpringBoot项目 引入需要的依赖包 第三 创建程序目录和配置核心appli
  • matlab实现留一交叉验证,留出法和交叉验证

    写论文的时候涉及到了这两种方法 这里进行总结 评估方法 主要分三种 留出法 分一次 互斥集 交叉验证法 分多次 对k折形成多次互斥集 自助法 有放回抽样 留出法 代码如下 function X train y train X test y
  • 小皮面板(phpstudy)上部署 thinkphp项目并成功访问

    每次搞 thinkphp 都忘记怎么步骤 或者是容易访问出错 尤其是重装系统以后 要安装 Apache MySQL PHP等 现在介绍一个集成工具 小皮面板 安装 小皮面板 1 选版本 根据自己电脑具体位数来选择对应的版本 比如 Windo
  • Echarts tooltip.trigger设为‘axis’ 如何自定义 Tooltip的显示

    题记 当echarts折线图中trigger设置为axis时 只想让tooltip自定义显示某一条线上的点的动态信息 Vue3 TS Vue Echarts 1 问题说明 1 现状 如下图所示折线图 当tooltip的trigger属性值设
  • Nvidia GPU 最新计算能力表(CUDA Compute Capability)

    对于深度学习 官方指出在GPU算力高于5 0时 可以用来跑神经网络 Jetson Products GPU Compute Capability Jetson AGX Xavier 7 2 Jetson Nano 5 3 Jetson TX
  • python实现FTP文件上传

    1 需求 通过python web server端上传大文件到FTP服务端 上传文件夹 下载文件等 1 代码 usr bin python coding UTF 8 from ftplib import FTP import os impo
  • EL表达式详解

    原文地址 http www cnblogs com Fskjb archive 2009 07 05 1517192 html EL 全名为Expression Language EL 语法很简单 它最大的特点就是使用上很方便 接下来介绍E
  • 【机器学习】SVR支持向量机回归

    回归和分类从某种意义上讲 本质上是一回事 SVM分类 就是找到一个平面 让两个分类集合的支持向量或者所有的数据 LSSVM 离分类平面最远 SVR回归 就是找到一个回归平面 让一个集合的所有数据到该平面的距离最近 我们来推导一下SVR 根据
  • VSCode提高代码开发效率插件:(一)差异对比插件

    写代码经常会用到代码对比的功能 以前常用独立的软件Merge Vscode中也有类似功能的插件 之前开发单片机一直用的Keil 但是用Keil编译去掉BroseInformation速度提上来了但是没法函数跳转了 Vscode可以解决这个问
  • 如何在VS 2017运行别人的C语言代码

    如何在VS 2017运行别人的C语言代码 我们在使用VS 2017的时候 只有C 项目没有C项目 如何运行从网上下载的别人的C语言项目代码呢 经过查找资料后 经过如下具体步骤 便能在VS 2017里运行C程序了 目录 如何在VS 2017运
  • ubuntu1804安装python3.8+odoo14

    如题 博主废了不少劲 折腾了一个上午终于搞定了 本次采用环境是ubuntu1804系统的docker容器 并且容器内部已更换阿里源 编辑阿里源 vi etc apt sources list 然后粘贴下面内容 再保存 deb http mi
  • 打印图像模糊问题解决方法

    思路 核心 图像转换 1 修改图像dpi值 2 使用高质量的双三次插值法 3 指定高质量 C Code 如下
  • 期货交易的主要特征(期货交易特征五大特征)

    期货交易的特点有哪些 一 合约标准化 期货交易是通过买卖期货合约进行的 而期货合约是标准化的 期货合约标准化指的是除价格外 期货合约的所有条款都是预先由期货交易所规定好的 具有标准化的特点 二 交易集中化 期货交易必须在期货交易所内进行 期
  • NGINX代理导致 获取不到请求头中的token信息

    原因 NGINX对header有所限制 下划线 不支持 解决方式1 请求头参数不用带下划线参数 解决方式2 在nginx里的nginx conf配置文件中的http部分中添加如下配置 underscores in headers on 默认
  • 生信人的20个R语言习题

    生信人的20个R语言习题 题目原文 http www bio info trainee com 3409 html 参考答案 https www jianshu com p dd4e285665e1 https www jianshu co
  • 多变量处理的LASSO方法

    1 lasso方法 其中 因变量是Y 自变量是X 数据中的变量众多 但如何选择X 就使用了lasso lasso能够对变量进行筛选和对模型的复杂程度进行降低 这里的变量筛选是指不把所有的变量都放入模型中进行拟合 而是有选择的把变量放入模型从
  • Longest Common Substring

    给出两个字符串 找到最长公共子串 并返回其长度 注意事项 子串的字符应该连续的出现在原字符串中 这与子序列有所不同 Lintcode上的一道题目 非常经典 需要找到最长的连续公共子串的长度 因为有两个序列且前后顺序不可以打乱 所以为双序列问