首页 > 其他分享 >刷题日记--最长公共子串问题

刷题日记--最长公共子串问题

时间:2023-06-04 18:02:24浏览次数:38  
标签:子串 String -- str2 str1 int length dp 刷题

题目描述:给定两个字符串str1和str2,输出两个字符串的最长公共子串

abcde bebcd == > bcd

实现代码:

实现代码

public class MaxSubString {
    public static void main(String[] args){
        String st1  = "abcde";
        String st2 = "ace";
        System.out.println(lstc1(st1,st2));

    }
    public static int[][] getdp(char[] str1,char[] str2){
        int[][] dp = new int[str1.length][str2.length];
        for(int i = 0;i < str1.length;i++){
            if(str1[i] == str2[0]){
                dp[i][0] = 1;
            }
        }
        for(int j = 1;j < str2.length;j++){
            if(str1[0] == str2[j]){
                dp[0][j] = 1;
            }
        }
        for(int i = 1;i < str1.length;i++){
            for(int j = 1;j < str2.length;j++){
                if(str1[i] == str2[j]){
                    dp[i][j] = dp[i-1][j-1] + 1;
                }
            }
        }
        return dp;

    }
    
    public static String lstc1(String str1,String str2){
        if(str1 == null || str2 == null || str1.equals("")||str2.equals("")){
            return "";
        }
        char[] cha1 = str1.toCharArray();
        char[] cha2 = str2.toCharArray();
        int[][] dp = getdp(cha1,cha2);
        int end = 0;
        int max = 0;
        for(int i = 0;i < cha1.length;i++){
            for(int j = 0;j < cha2.length;j++){
                if(dp[i][j] > max){
                    end = i;
                    max = dp[i][j];
                }
            }
        }
        return str1.substring(end - max + 1,end + 1);

    }
}

输出结果:

a

标签:子串,String,--,str2,str1,int,length,dp,刷题
From: https://www.cnblogs.com/99kol/p/17456003.html

相关文章

  • 【计算机视觉】---OpenCV实现物体追踪
    简介OpenCV中的物体追踪算法基于视觉目标跟踪的原理。物体追踪的目标是在连续的图像序列中定位和跟踪特定物体的位置。目标表示在物体追踪中,我们需要对目标对象进行表示。通常使用边界框(boundingbox)来表示目标的位置和大小。边界框是一个矩形区域,由左上角的坐标(x,y)和宽度(w)以及高度(h......
  • 普加资源甘特图Rgantt简介
    资源甘特图(RGantt)是Web环境功能最强大的生产排程甘特图控件,具有强大的定制能力,适用于生产制造类系统开发。支持.Net、Java等开发平台。它可以显示一个生产线或设备的多道工序排布情况,并且可以进行干涉调整,达到最佳生产效益。无需安装插件,兼容所有主流浏览器,支持JAVA、.Net等任意开......
  • 【电商api接口京东系列】获取推荐商品列表+获得商品评论演示示例
    数据采集是指获取和整理各种数据的过程,这些数据可以来自各种来源,例如互联网、社交媒体、传统媒体、设备传感器、企业内部系统等。通常,数据采集是企业或组织重要的商业活动之一。它可以帮助企业了解客户需求、产品趋势、市场机会,以及竞争对手的情况,进而做出更加明智的商业决策。......
  • 2023年6月3日,枚举,枚举底层实现
    1.枚举1.枚举枚举是一种受限制的类,枚举第一行必须创建对象,枚举不能显示继承父类(枚举没有父类),所有的自定义枚举类默认继承Enum类packagecom.wz.enum01;publicenumSeason{spring("春天","春雨绵绵"),summer("夏天","烈日炎炎"),autumn("秋天","硕果累累"),......
  • pnpm:无法加载文件 C:\Users\Five\AppData\Roaming\npm\pnpm.ps1 ,因为在此系统
    前言重装完了电脑系统,运行pnpm无法加载文件,pnpm-V也不行解决方案用管理员方式启动powershell输入命令:set-ExecutionPolicyRemoteSigned然后再输入:Y重启代码编辑器 ......
  • 逆向大法好-----实战中的IDA和OD一把梭
    0X01一直对D盾检测账号克隆的功能感到好奇,终于跟着老师傅的教程手把手学会了怎么用IDA,OD配合去逆向分析。D盾有一项功能是账号克隆:通过StudyPe查看,使用了NetUserEnum相关的函数通过查看msdn的例子:https://docs.microsoft.com/zh-cn/windows/desktop/api/lmaccess/nf-lmaccess-netus......
  • C++面试八股文:struct、class和union有哪些区别?
    某日小二参加XXX科技公司的C++工程师开发岗位5面:面试官:struct和class有什么区别?小二:在C++中,struct和class的唯一区别是默认的访问控制。struct默认的成员是public的,而class的默认成员是private的。面试官:struct、class和union有哪些区别?小二:union和struct、class在内存布局上......
  • flutter学习笔记(二)
    flutter一切皆widgetflutter和web前端的区别:1.js语法变成dart2.html标签变成组件widget3.flutter里没有css,只有各种widget的属性来实现样式(比如绝对定位用Stack组件来实现)fluter和web前端的相同点:1.dart语法接近js2.flutter里也可以实现flex弹性布局,用Expanded来实现(Expand......
  • Linux shell command cut All In One
    LinuxshellcommandcutAllInOnecut截取指定符号等号后面的字符串cut截取等号后面的字符串#获取env$env#获取登录当前用户信息$env|grepUSER$env|grepUSER|cut-d"="-f2#获取登录当前用户信息$whomai$echo$USERdemos#!/usr/bin/env......
  • Satori指纹识别原理及dhcp分析
    Satori是被动识别中的一款独树一帜的软件,和ettercap等软件不同,它专门采用dhcp进行识别。本文通过对satori进行测试、读源码对其识别机制进行简单的分析,并在最后一部分对Satori开发者的paper进行了解读。解压后有如下几个文件其中,dhcp.xml和tcp.xml在下文会详细分析,p0f.fp,p0fa.fp是......