华为OD机考题(HJ65 查找两个字符串a,b中的最长公共子串)

前言

经过前期的数据结构和算法学习,开始以OD机考题作为练习题,继续加强下熟练程度。

描述

查找两个字符串a,b中的最长公共子串。若有多个,输出在较短串中最先出现的那个。

注:子串的定义:将一个字符串删去前缀和后缀(也可以不删)形成的字符串。请和“子序列”的概念分开!

数据范围:字符串长度1≤𝑙𝑒𝑛𝑔𝑡ℎ≤300 1≤length≤300 

进阶:时间复杂度:𝑂(𝑛3) O(n3) ,空间复杂度:𝑂(𝑛) O(n) 

输入描述:

输入两个字符串

输出描述:

返回重复出现的字符

示例1

输入:

abcdefghijklmnop

abcsafjklmnopqrstuvw
输出:
jklmnop

实现原理与步骤

1.从1个字符到N字符逐次比较字符的一致性,用到了java原生的contains方法

实现代码(暴力算法)

import java.util.Scanner;// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);String word1 = in.nextLine();String word2 = in.nextLine();int len1 = word1.length();int len2 = word2.length();if (len1 < len2) {String temp = word1;word1 = word2;word2 = temp;}int maxLen = 0;String res = "";for (int i = 0; i < word2.length(); i++) {for (int j = 0; j <=i; j++) {String subStr = word2.substring(j, i+1);if (word1.contains(subStr) && subStr.length() > maxLen) {res = subStr;maxLen = subStr.length();}}}System.out.println(res);}
}

实现代码(动态规划)

import java.util.*;
public class Main {public static void main(String[]args) {Scanner sc = new Scanner(System.in);while (sc.hasNext()) {String s1 = sc.nextLine();String s2 = sc.nextLine();System.out.println(longString(s1, s2));}}// 动态规划public static String longString(String str1, String str2) {String temp = "";// 保证str1是较短字符串if (str1.length() > str2.length()) {temp = str1;str1 = str2;str2 = temp;}int m = str1.length();int n = str2.length();// 表示在较短字符串str1以第i个字符结尾,str2中以第j个字符结尾时的公共子串长度。int[][] dp = new int[m+1][n+1];// 匹配字符,并记录最大值的str1的结尾下标int max = 0;int index = 0;// 从左向右递推,i为短字符串str1的结尾索引,j为str2的结尾索引for (int i = 1; i <=m; i++) {for (int j = 1; j <=n; j++) {if (str1.charAt(i - 1) == str2.charAt(j - 1)) {// 相等则计数dp[i][j] = dp[i - 1][j - 1] + 1;// 不断更新变量if (dp[i][j] > max) {max = dp[i][j];index = i;}}}}// 截取最大公共子串return str1.substring(index - max, index);}
}

1.QA:

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

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

相关文章

【Git 】规范 Git 提交信息的工具 Commitizen

Commitizen是一个用于规范Git提交信息的工具&#xff0c;它旨在帮助开发者生成符合一定规范和风格的提交信息&#xff0c;从而提高代码维护的效率&#xff0c;便于追踪和定位问题。以下是对Commitizen的详细介绍。 1、Commitizen的作用与优势 规范提交信息&#xff1a;通过提供…

C# Application.DoEvents()的作用

文章目录 1、详解 Application.DoEvents()2、示例处理用户事件响应系统事件控制台输出游戏和多媒体应用与操作系统的交互 3、注意事项总结 Application.DoEvents() 是 .NET 框架中的一个方法&#xff0c;它主要用于处理消息队列中的事件。在 Windows 应用程序中&#xff0c;当一…

Oracle PL / SQL INTERVAL数据类型

INTERVAL YEAR TO MONTH数据类型 INTERVAL YEAR TO MONTH存储和操作年和月的间隔。 语法是&#xff1a; INTERVAL YEAR[(precision)] TO MONTH precision指定“years”字段中的数字位数。 我们必须在0..4的范围内使用整数字面值。默认值为2。 以下代码显示如何将字面值分配…

基于16通道AD采集(CL1616和AD7616)的FPGA设计简介

Cl1616是一款 16 位 DAS,支持对 16 个通道进行双路同步采样。CL1616 采用 5 V 单电源供电,可以 处理10 V、5 V 和2.5 V 真双极性输入信号,同时每对通道均能以高达 1 MSPS 的吞吐速率和 90 dB SNR 采样。利用片内过采样模式可实现更高的 SNR 性能。 AD7616与CL1616软硬件兼容…

实验四 图像增强—灰度变换之直方图变换

一&#xff0e;实验目的 1&#xff0e;掌握灰度直方图的概念及其计算方法&#xff1b; 2&#xff0e;熟练掌握直方图均衡化计算过程&#xff1b;了解直方图规定化的计算过程&#xff1b; 3&#xff0e;了解色彩直方图的概念和计算方法 二&#xff0e;实验内容&#xff1a; …

ArcGIS Pro SDK (八)地理数据库 1 地理数据库和数据存储

ArcGIS Pro SDK &#xff08;八&#xff09;地理数据库 1 地理数据库和数据存储 文章目录 ArcGIS Pro SDK &#xff08;八&#xff09;地理数据库 1 地理数据库和数据存储1 打开给定路径的文件地理数据库2 使用连接属性打开企业级地理数据库3 使用 sde 文件路径打开企业级地理数…

Bootstrap 提示工具

Bootstrap 提示工具 Bootstrap 是一个流行的前端框架,它提供了一套丰富的工具和组件,用于快速开发响应式和移动设备优先的网页。其中,提示工具(Tooltip)是 Bootstrap 提供的一个非常有用的组件,它可以在用户将鼠标悬停在某个元素上时显示额外的信息。本文将详细介绍 Boo…

课设:选课管理系统(Java+MySQL)

在本博客中&#xff0c;我将介绍用Java、MySQL、JDBC和Swing GUI开发一个简单的选课管理系统。 技术栈 Java&#xff1a;用于编写应用程序逻辑MySQL&#xff1a;用于存储和管理数据JDBC&#xff1a;用于连接Java应用程序和MySQL数据库Swing GUI&#xff1a;用于构建桌面应用程…

555 定时器芯片工作原理

在本教程中&#xff0c;您将学习如何使用 555 定时器做一些有趣的事情。许多人用它做的第一件事就是制造闪烁的灯光。但这只是用该芯片可以做很多事情的简单示例之一。您还可以控制电机、创建闹钟、创建乐器等等。 让我们先来概览一下这些引脚。 555 定时器引脚排列 引脚 1 接地…

【SpringCloud】概述 -- 微服务入门

在Java的整个学习过程中&#xff0c;大家势必会听见一些什么分布式-微服务、高并发、高可用这些专业术语&#xff0c;给人的感觉很高级&#xff0c;有一种高深莫测的感觉。可以看一下这篇博客对这些技术架构的演变有一个初步的认识: 服务端⾼并发分布式结构演进之路-CSDN博客文…

image媒体组件属性配合swiper轮播

图片组件&#xff08;image&#xff09; 先插入个图片试试&#xff0c;插入图片用src属性&#xff0c;这是图片&#xff1a; 代码如下&#xff1a; <template><view><swiper indicator-dots indicator-color "#126bae" indicator-active-color &…

Jectpack Navigation组件设置统一跳转动画

Activity的跳转一般通过Theme设置即可&#xff0c;但是Framment的跳转除了NavigationUI类提供的方法会有动画以外&#xff0c;直接调用navigate方法是没有动画的。 网上的实现个人认为比较麻烦&#xff0c;帮自己写了一套&#xff0c;主要就是自定义NavHostFragement和Fragmen…

CobaltStrike的内网安全

1.上线机器的Beacon的常用命令 2.信息收集和网站克隆 3.钓鱼邮件 4.CS传递会话到MSF 5.MSF会话传递到CS 1上线机器的Beacon的常用命令 介绍&#xff1a;CobaltStrike分为服务端和客户端&#xff0c;一般我们将服务端放在kali&#xff0c;客户端可以在物理机上面&#xff0…

tongweb 部署软航流版签一体化应用示例 提示跨域错误CORS ERROR

目录 问题现象与描述 解决办法 原理解析 什么是CORS 浏览器跨域请求限制 跨域问题解决方法 跨域请求流程 浏览器请求分类解析 http请求方法简介 问题现象与描述 重庆软航科技有限公司提供了一套针对针对word、excel等流式文件转换成PDF版式文件并进行版式文件在线签章…

ai积累-具体应用的大概设想

这些场景展示了以 ChatGPT 为代表的生成式 AI 可能的具体应用&#xff1a; 教育辅助&#xff1a; AI 可以充当学生的个性化辅导老师&#xff0c;提供定制化的学习材料和练习。例如&#xff0c;它可以生成针对学生能力水平和兴趣的数学问题或历史教学文章。 客户支持&#xff1…

LESS 的嵌套写法有什么优势?

LESS的嵌套写法可以提高代码的可读性和维护性。通过将相关的样式规则嵌套在父选择器中&#xff0c;可以更清晰地表达样式之间的层级关系&#xff0c;避免重复的代码&#xff0c;并且使样式结构更加整洁。 例如&#xff0c;假设有以下HTML结构&#xff1a; <div class"…

Qt 加载图片的几种方式 以及加载 loading

项目中经常使用加载图片&#xff1a; 常用有两种方式&#xff1a; 1.使用 QWidget 加载图片&#xff1a; 效果&#xff1a; 样例源码&#xff1a; int pict_H ui->widgetImage->height();int pict_W ui->widgetImage->width();ui->widgetImage->setFixe…

白骑士的C语言教学高级篇 3.4 C语言中的算法

算法是解决问题的核心。无论是排序、搜索&#xff0c;还是递归与动态规划&#xff0c;算法的选择和实现对程序的效率和性能有着重要影响。本节将介绍几种常见的算法&#xff0c;包括排序算法、搜索算法&#xff0c;以及递归和动态规划的应用。 排序算法 排序算法是将一组数据按…

昇思25天学习打卡营第17天|SSD目标检测

学AI还能赢奖品&#xff1f;每天30分钟&#xff0c;25天打通AI任督二脉 (qq.com) SSD目标检测 模型简介 SSD&#xff0c;全称Single Shot MultiBox Detector&#xff0c;是Wei Liu在ECCV 2016上提出的一种目标检测算法。使用Nvidia Titan X在VOC 2007测试集上&#xff0c;SSD…

使用 CloudWatch + SNS + Lambda 实现多渠道告警系统

1. 简介 在现代云计算环境中,及时和有效的监控告警对于维护系统的稳定性至关重要。本文将介绍如何使用 AWS CloudWatch、Simple Notification Service (SNS) 和 Lambda 函数构建一个多渠道告警系统,包括邮件告警、钉钉机器人告警和电话语音告警。 2. 系统架构 整个系统的工…