Java日常练习题,每天进步一点点(28)

题目:给定两个字符串,找到这两个字符串中最长的公共连续子字符串。

示例1:

输入: str1 = "ABCD" ,str2 = "CBCE"
输出: "BC"

示例2:

输入: str1 = "ABC" ,str2 = "DEF"
输出: ""

分析:题目要求找到两个字符串的最长公共连续子字符串,我们可以通过动态规划算法来解决此类问题。具体思路是,定义一个二维数组dp,其中dp[i][j]表示字符串str1的第i个字符和字符串str2的第j个字符之前的最长公共子串的长度。若当前两个字符相等,则可以推出状态转移方程dp[i][j] = dp[i-1][j-1] + 1,否则dp[i][j] = 0。最后找到数组中的最大值,并根据长度截取公共子串即可。

代码示例:

public static String longestCommonSubString(String str1, String str2) {
    int[][] dp = new int[str1.length()+1][str2.length()+1];
    int maxLen = 0;
    int end = 0;
    for (int i = 1; i <= str1.length(); i++) {
        for (int j = 1; j <= str2.length(); j++) {
            if (str1.charAt(i-1) == str2.charAt(j-1)) {
                dp[i][j] = dp[i-1][j-1] + 1;
            }
            if (dp[i][j] > maxLen) {
                maxLen = dp[i][j];
                end = i-1;
            }
        }
    }
    return str1.substring(end-maxLen+1, end+1);
}

代码说明:本代码在二维数组dp初始化时为了方便后续处理,二维数组第一维和第二维分别加了1,最后找到数组中的最大值并根据长度截取公共子串时需要考虑边界情况。

示例1解析:在str1="ABCD" 和 str2="CBCE"的情况下,根据动态规划算法得到的dp数组如下所示,其中11表示B和B的公共连续子串长度为1,22表示BC和BC的公共连续子串长度为2:

C B C E
0 0 0 0 0
A 0 0 0 0 0
B 0 0 1 2 0
C 0 1 0 0 1
D 0 0 0 0 0

最后找到dp数组中的最大值为22,因此返回的结果为"BC"。

示例2解析:在str1="ABC" 和 str2="DEF"的情况下,根据动态规划算法得到的dp数组如下所示,其中公共连续子串长度均为0:

D E F
0 0 0 0
A 0 0 0 0
B 0 0 0 0
C 0 0 0 0

最后找到dp数组中的最大值为0,因此返回的结果为""。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java日常练习题,每天进步一点点(28) - Python技术站

(0)
上一篇 2023年5月23日
下一篇 2023年5月23日

相关文章

  • C语言入门之查找子串问题

    C语言入门之查找子串问题 1. 什么是查找子串? 查找子串指的是在一个字符串中寻找另一个字符串的过程。在C语言中,一般通过库函数来实现查找子串的功能。 2. C语言中的查找子串函数 C语言标准库中提供了许多函数可以帮助我们寻找子串,常用的有strstr()和strcasestr()。 2.1 strstr() strstr()函数可以在一个字符串中查找另一个…

    C 2023年5月23日
    00
  • C语言实现任意进制转换器

    C语言实现任意进制转换器的攻略如下: 介绍 进制转换是计算机科学中的一个基本问题。通常我们使用十进制作为计算的基础,但在某些场合下,如计算机领域中,可能需要十六进制或二进制来表示数据。因此,实现任意进制转换器是非常有用的。 操作步骤 实现任意进制转换器,需要以下的步骤: 输入要转换的数和当前进制; 将输入的数转换为十进制; 将十进制数转换为目标进制; 输出结…

    C 2023年5月23日
    00
  • C++实现学生考勤信息管理系统

    C++实现学生考勤信息管理系统 系统需求 首先,我们需要定义考勤信息管理系统的需求: 能够添加新学生记录; 能够删除指定学生记录; 能够显示所有学生记录; 能够修改指定学生记录; 能够查询指定学生记录。 数据结构设计 为了实现学生考勤信息管理系统,我们需要定义数据结构来存储学生记录。这里我们选择使用结构体来表示一个学生记录,包括以下字段: struct St…

    C 2023年5月23日
    00
  • C语言中随机数rand()函数详解

    下面是关于C语言中随机数rand()函数的详解攻略: C语言中随机数rand()函数详解 简介 rand()函数是C语言标准库中的一个伪随机数生成函数,头文件为stdlib.h。它的作用是生成一个在0到RAND_MAX之间的随机整数,其中RAND_MAX是一个常量,其值至少为32767。要生成不同的随机数序列,可以先调用srand()函数设置不同的seed种…

    C 2023年5月22日
    00
  • Qt数据库应用之实现通用数据库请求

    下面是详细的讲解“Qt数据库应用之实现通用数据库请求”的完整攻略: 什么是通用数据库请求 通用数据库请求是指一种可以适用于多种不同类型数据库的请求方式,通过统一的接口访问多种数据库,能够大大提高开发效率。在 Qt 中,可以通过 QSqlQuery 和 QSqlDatabase 类来实现通用数据库请求。 实现通用数据库请求的步骤 创建数据库连接:使用 QSql…

    C 2023年5月22日
    00
  • Windows 2003 服务器安全设置图文教程

    针对“Windows 2003 服务器安全设置图文教程”的完整攻略,我给出如下的详细讲解。 Windows 2003 服务器安全设置图文教程攻略 为什么需要进行安全设置 Windows 2003服务器上的安全设置非常重要,它无论是对个人用户,还是企业用户,都拥有不可忽视的重要性。 首先,Windows 2003服务器安全设置可以保障服务器的安全稳定性,避免网…

    C 2023年5月22日
    00
  • OpenSCA技术原理npm依赖示例解析

    OpenSCA技术原理npm依赖示例解析 OpenSCA是一种开放式的SOAP(简单对象访问协议)组件体系结构,可以用于构建SOA(面向服务的架构)应用程序。OpenSCA技术使用了许多依赖关系,其中包括npm依赖。下面是本文的攻略。 安装Node.js 在开始使用OpenSCA和npm依赖之前,需要安装Node.js。如果您没有安装,请前往Node.js官…

    C 2023年5月23日
    00
  • oaptt搭建http服务的过程详解

    下面是“oaptt搭建http服务的过程详解”的完整攻略。 什么是oaptt? oaptt是一款优秀的Python Web框架,它基于Tornado实现,提供更加灵活和高效的Web应用程序搭建方式。oaptt支持多种模板引擎,集成对象关系映射(ORM)库,支持静态文件服务等功能。它的代码简洁易懂,上手门槛较低,适合初学者和中级开发者快速搭建Web应用程序。 …

    C 2023年5月23日
    00
合作推广
合作推广
分享本页
返回顶部