如何在华为OD机试中获得满分?Java实现【查找两个字符串a,b中的最长公共子串】一文详解!

news/2024/10/30 23:24:29/

请添加图片描述

✅创作者:陈书予
🎉个人主页:陈书予的个人主页
🍁陈书予的个人社区,欢迎你的加入: 陈书予的社区
🌟专栏地址: Java华为OD机试真题(2022&2023)

文章目录

  • 1、题目描述
  • 2、输入描述
  • 3、输出描述
  • 4、Java算法源码
  • 5. 测试
  • 6.解题思路

1、题目描述

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

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

数据范围:字符串长度1≤length≤300 。

2、输入描述

输入两个字符串。

3、输出描述

返回重复出现的字符。

4、Java算法源码

public static void main(String[]args){Scanner sc=new Scanner(System.in);while(sc.hasNext()){String s1=sc.nextLine();String s2=sc.nextLine();longString(s1,s2);}
}
public static void longString(String s1,String s2){String shortStr = s1.length() < s2.length() ? s1 : s2;String longStr = s1.length() > s2.length() ? s1 : s2;int shortLen = shortStr.length();int longLen = longStr.length();int maxLen = 0, start = 0;for(int i = 0; i < shortLen;i++) {// 剪枝,子串长度已经不可能超过maxLen,退出循环if(shortLen - i + 1 <= maxLen) {break;}// 左指针j,右指针k, 右指针逐渐向左逼近for(int j = i, k = shortLen; k > j; k--) {String subStr = shortStr.substring(i, k);if(longStr.contains(subStr) && maxLen < subStr.length()) {maxLen = subStr.length();start = j;// 找到就立即返回break;}}}System.out.println(shortStr.substring(start, start + maxLen));
}

5. 测试

在这里插入图片描述

6.解题思路

在这里插入图片描述

  1. 首先读取输入的两个字符串。
  2. 判断哪个字符串更短,将其作为短串,另一个字符串作为长串。
  3. 获取短串和长串的长度。
  4. 初始化变量 maxLenstart,分别用于记录最长公共子串的长度和起始位置。
  5. 使用两层循环,外层循环遍历短串,内层循环遍历短串中的子串。
  6. 在每次内层循环中,判断当前子串是否是长串的子串,并且比较其长度是否大于之前记录的最大长度。
  7. 如果满足条件,更新最大长度 maxLen 和起始位置 start
  8. 循环结束后,根据最大长度和起始位置在短串中提取出最长公共子串,并输出。

在这里插入图片描述


http://www.ppmy.cn/news/98709.html

相关文章

jquery data和data-属性不一致问题

延申val和value属性同样不一致 <script src"https://code.jquery.com/jquery-3.7.0.min.js"></script> <input type"text" value"F119-PW110" data-tag"F119" id"txtEngine" name"Engine" placeh…

DOM补充与BOM操作

DOM补充 可以通过dom对元素进行增删改查操作 --> 增删改查是基于Node节点来实现 parent: 父级 child: 子级 创建节点: createElement 创建一个元素节点 添加节点: appendChild 元素最后添加一个子节点 insertBefore 在元素某个子节点之前添加新的子节点 第一个参数为新节…

C++多线程

多进程与多线程 多进程并发 使用多进程并发是将一个应用程序划分为多个独立的进程&#xff08;每个进程只有一个线程&#xff09;&#xff0c;这些独立的进程间可以互相通信&#xff0c;共同完成任务。由于操作系统对进程提供了大量的保护机制&#xff0c;以避免一个进程修改了…

js常用事件

js常用事件如下&#xff1a; onmouseover&#xff1a;鼠标被移到某元素之上&#xff1b; onmouseout&#xff1a;鼠标从某元素移开&#xff1b; onfocus&#xff1a;元素获得焦点&#xff1b; onblur&#xff1a;元素失去焦点&#xff1b; onclick&#xff1a;鼠标单击事件…

深度挖掘.c到.exe的整个过程,透过现象看本质

文章目录 程序的翻译环境和执行环境翻译环境编译预编译头文件的包含删除注释替换#define定义的符号 编译词法分析语法分析语义分析符号汇总 汇编 链接合并段表符号表的合并和重定位 执行环境 程序的翻译环境和执行环境 在ANSI C的任何一种实现中&#xff0c;存在两个不同的环境…

网络安全--红队资源大合集

红队攻击的生命周期&#xff0c;整个生命周期包括&#xff1a; 信息收集、攻击尝试获得权限、持久性控制、权限提升、网络信息收集、横向移动、数据分析&#xff08;在这个基础上再做持久化控制&#xff09;、在所有攻击结束之后清理并退出战场。 重点提醒&#xff1a;本项目…

Latex在同一figure中排版多张图片的方法

Latex在同一figure中排版多张图片的方法 主要使用了minipage&#xff08;子图&#xff09;语法。minipage可以嵌套&#xff0c;子图还可以分解为更多子图&#xff0c;功能很好玩&#xff0c;无聊可以自己试试。下面介绍几种常用效果的实现方法。 并排显示两张图&#xff0c;并…

【JVM】12. 垃圾回收相关概念

文章目录 12.1. System.gc()的理解12.2. 内存溢出与内存泄露内存溢出&#xff08;OOM&#xff09;内存泄漏&#xff08;Memory Leak&#xff09; 12.3. Stop The World12.4. 垃圾回收的并行与并发并发&#xff08;Concurrent&#xff09;并行&#xff08;Parallel&#xff09;并…