找最长公共子串

2023-10-29

题目

小明有两个字符串(可能包含空格),小明想找出其中最长的公共连续子串,希望你能帮助他,并输出其长度。
输入描述:输入为两行字符串(可能包含空格),长度均小于等于50。
输出描述:输出为一个整数,表示最长公共连续子串的长度。

示例1
输入:
abcde
abgde

输出:
2

思路一

1、先判断哪个字符串比较短,因为公共子串的长度不会超过短字符串的长度。
2、设置左右指针,指针的距离为短字符串的长度。查看长字符串是否包含短字符串该长度的子串。
若包含,则该子串为最长串,可直接返回其长度。若不包含,则长度递减,继续遍历短字符串中所有该长度的子串。
一直遍历到长度为0为止.

实现

public int maxSubstringLength1(String a, String b) {
String longString;
String shortString;

//先判断哪个字符串比较短
longString = a.length() > b.length() ? a : b;
shortString = a.length() > b.length() ? b : a;

//判断如果短字符串为空,就可以返回0
if (shortString.equals("")) {
return 0;
}

//直接遍历短的字符串查找
int shortLength = shortString.length();
for (int i = 0; i < shortLength; i++) {
//从短字符串的最长串开始找,然后每次缩短长度
for (int l = 0, r = shortLength - i; r <= shortLength; l++, r++) {
if (longString.contains(shortString.substring(l, r))) {
return shortString.substring(l, r).length();
}
}
}
return 0;
}

思路二

使用动态规划的思想,定义二维数组dp。dp[i][j]表示a串前i个和b串前j个的最长公共子串的长度。
使用max记录当前的最长公共子串的长度。
如果a的首字符和b的首字符相等,那么dp[0][0]初始化为1,否则dp[0][0]为0。
在i与j不同时为0的情况下,如果a的第i个字符与b的第j个字符相等,那么dp[i][j] = dp[i-1][j-1] + 1,
并且判断max与dp[i][j]的大小以更新max。最终返回max

实现

public int maxSubstringLength2(String a, String b){
int length1 = a.length();
int length2 = b.length();

int max = 0;//用来记录当前的最长子串

//dp[i][j]表示a串前i个和b串前j个的最长公共子串
int[][] dp = new int[length1][length2];

for(int i = 0; i < length1; i++){
for(int j = 0; j < length2; j++){
//如果a的第i个字符与b的第j个字符相等
if(a.charAt(i) == b.charAt(j)){
//如果a与b首个字符相等
if(i == 0 && j == 0){
dp[i][j] = 1;
}else{
dp[i][j] = dp[i-1][j-1] + 1;
}

//发现更长的子串,则更新max
if(max < dp[i][j]){
max = dp[i][j];
}
}
}
}
return max;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

找最长公共子串 的相关文章

随机推荐

  • 三种公钥密码体系(传统公开密钥体系 / 基于身份的公开密钥体系 / 基于无证书的公开密钥体系 )

    公开密钥体系 分类 基于证书的公开密钥体系 基于身份的公开密钥体系 基于无证书的公开密钥体系 基于证书的公开密钥体系 第一种方案是采用证书机制实现用户的身份和用户的钥匙之间的安全对应 证书机制一般都采用公钥基础设施 Public Key I
  • 开心档之Bootstrap4 自定义表单

    Bootstrap4 自定义表单 Bootstrap4 可以自定义一些表单的样式来替换浏览器默认的样式 自定义复选框 如果要自定义一个复选框 可以设置 div 为父元素 类为 custom control 和 custom checkbox
  • 如何让FasterTransformer支持动态batch和动态sequence length

    FasterTransformer 算子 nvidia在开源的FasterTransformer的代码中 提供tensorrt和tensorflow的自定义算子编译和py调用示例 详见FasterTransformer py 但是如果使用t
  • openwrt编译环境搭建

    openwrt编译环境搭建 1 虚拟机安装 请参考网络上的资料进行安装 2 ubuntu安装 请参考网络上的资料进行安装 3 ubuntu下安装相关的编译环境 若是编译环境没有准备好 在后来的操作中会出现一些问题 sudoapt get i
  • 什么是4K HDR?HDR10+、HDR10 PRO、杜比视界HDR区别

    转自 https www sohu com a 255875615 200013 这一篇继续围绕4K给大家讲一下4K中的4K HDR HDR10 HDR10 都是什么意思 关于更多4K HDR相关资料和视频电影请到 Hao4K https
  • Angular进阶技术之模块化及懒加载

    Angular组件模块化以及路由懒加载 前提摘要 模块化的场景 NgModule 引发的思考 如何去定义模块和模块化的作用 Angular模块化以及路由懒加载 延伸 子组件模块 二级路由懒加载模块 模块化引申 一些命令和tips 本地发布测
  • 第六章 修改表

    文章目录 第六章 修改表 1 修改表的数据类型 2 添加列 3 修改列的位置 4 修改列名和数据类型 5 删除列 6 设置主键 7 设置唯一键 8 使列具有自动连续编号功能 9 设置默认值 10 关于索引的操作 第六章 修改表 1 修改表的
  • cad中tk什么意思_cad图纸中各种字母是什么意思

    展开全部 ACE 在能进入的bai吊顶在敷du设 BC 暗敷 梁zhi内 CLC 暗敷设在dao柱子内 we 暗敷设在墙回内 WE 沿墙明敷答设 FC 预埋在地面内 BE 沿屋架或跨屋架敷设 CLE 沿柱或跨柱敷设 WE 沿墙面敷设 CE
  • PCL 欧式聚类分割

    目录 一 算法原理 1 实现流程 2 实现方法 3 核心代码 4 参考文献 二 代码实现 三 结果展示 四 应用案例 五 保存结果 六 不调库实现 一 算法原理 1 实现流程 欧式聚类是一种基于欧氏距离度量的聚类算法 基于KD Tree的近
  • Docker 入门到实战教程(一)介绍Docker

    一 Docker简介 1 1 什么是虚拟化 在计算机中 虚拟化 英语 Virtualization 是一种资源管理技术 是将计算机的各种实体资源 如服务器 网络 内存及存储等 予以抽象 转换后呈现出来 打破实体结构间的不可切割的障碍 使用户
  • hadoop web查看集群datanode 信息不全

    环境说明 同一主机上 两台ubuntu虚拟机 问题 启动Hadoop后 两个节点上的jps查看进程正常 可web登录50070端口 查看的datanode information 只显示的本机上的datanode信息 namenode上jp
  • Serializable序列化实例

    需要序列化的对象 package com zizhu import java io Serializable public class SerializableHello implements Serializable private st
  • 工具类——Java导出EXCEL2(设置样式、加载并填充图片、加载指定模板、大数据量设置窗口大小与刷新频率)

    文章目录 一 POI设置样式 二 POI导出图片 1 解释XSSFClientAnchor 三 加载指定模板导出 四 Workbook XSSFWorkbook与SXSSFWorkbook 1 大数据量导出 1 根据数据量选择XSSFWor
  • ora-12801错误

    今天开发人员遇到如下错误 SQL gt SELECT from 2 FT SB FCS C 3 FT DJ FCDJ D 4 WHERE C YXBZ Y 5 AND C CQZH D FCDJXH 6 AND D ZYBZ Y 7 AND
  • Stress-ng

    介绍如何在 Linux 系统上使用 stress ng 负载测试工具 产生 CPU 内存等资源满载的状况 stress ng stress ng 与旧的 stress 都可以用来产生系统负载 但新的 stress ng 功能较丰富 所以这里
  • C++入门(2/2)

    目录 一 内联函数 二 auto关键字 C 11 三 范围for 四 nullptr 一 内联函数 C 用inline修饰的函数 会在编译时在调用内联函数的地方展开 没有了函数调用建立栈帧的开销 内联函数提升程序运行的效率 对于一个短小的函
  • ubuntu解决连不上网问题(无网关篇)

    今天用ubuntu时发现系统连不上网了 可能是之前捣鼓虚拟机作为ftp服务器导致的 windows下ipconfig命令查看到虚拟机的默认网关是空的 知道了是ubuntu默认网关没配好的原因 参考了这篇博客 如下 1条消息 虚拟机ping不
  • 1 两数之和

    题目描述 给定一个整数数组 nums 和一个目标值 target 请你在该数组中找出和为目标值的那 两个 整数 并返回他们的数组下标 你可以假设每种输入只会对应一个答案 但是 数组中同一个元素不能使用两遍 示例 给定 nums 2 7 11
  • 2-27-Exploring Cross-Image Pixel Contrast for Semantic Segmentation(arxiv2021)有代码

    原文链接 http www myzaker com article 60348715b15ec0509c7170d3 在这篇论文中 研究者提出了一种新的 全监督语义分割训练范式 像素对比学习 强调利用训练集中 跨图像的像素 像素对应关系来学
  • 找最长公共子串

    题目 小明有两个字符串 可能包含空格 小明想找出其中最长的公共连续子串 希望你能帮助他 并输出其长度 输入描述 输入为两行字符串 可能包含空格 长度均小于等于50 输出描述 输出为一个整数 表示最长公共连续子串的长度 示例1 输入 abcd