如何在华为OD机试中获得满分?Java实现【最多提取子串数目】一文详解!

news/2024/12/22 20:04:19/

请添加图片描述

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

文章目录

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

1. 题目描述

给定由[a-z] 26个英文小写字母组成的字符串A和B,其中A中可能存在重复字母,B中不会存在重复字母。现从字符串A中按规则挑选一些字母,以组成字符串B。

挑选规则如下:

  1. 同一个位置的字母只能被挑选一次;
  2. 被挑选字母的相对先后顺序不能改变。

求最多可以同时从A中挑选多少组能组成B的字符串。

2. 输入描述

输入为2行,第1行输入字符串A,第2行输入字符串B。行首行尾无多余空格,其中A和B均由[a-z] 26个英文小写字母组成。

  • 0 < A.length < 100,A中可能包含重复字母。
  • 0 < B.length < 10,B中不会出现重复字母。

3. 输出描述

输出1行,包含1个数字,表示最多可以同时从A中挑选多少组能组成B的字符串,行末无多余空格。 无需验证输入格式和输入数据合法性。

4. Java算法源码

/*** 从字符串A中按规则挑选一些字母,组成字符串B。** 同一个位置的字母只能被挑选一次;* 被挑选字母的相对先后顺序不能改变;*/
public static void main(String[] args) {Scanner sc = new Scanner(System.in);// 可能存在重复字母的字符串AString a = sc.nextLine();// 不存在重复字母的字符串BString b = sc.nextLine();char[] arrA = a.toCharArray();char[] arrB = b.toCharArray();int count = 0;int i = 0;int j = 0;while (i < a.length()) {if (arrA[i] == arrB[j]) {// 已经匹配的置为*,表示无法复用arrA[i] = '*';// 能匹配对应的字符,子串指针后移j++;}// 如果j到达尾部+1了,则重新置0if (j == b.length()) {i = 0;j = 0;count++;} else {i++;}}System.out.println(count);
}

5. 测试

示例输入示例输出说明
abcabcabc按照顺序,从字符串A中取出两个B。
javajjnezharrr
jar
2从字符串A中依次取出"jar",可以取两次。

6.解题思路

在这里插入图片描述

  1. 将字符串A和字符串B转换为字符数组arrAarrB
  2. 初始化计数变量count为0,表示可以同时从A中挑选的组数。
  3. 使用两个指针ij分别指向arrAarrB的起始位置。
  4. 开始遍历arrA,当指针i小于A的长度时,执行以下操作:
    • 检查arrA[i]arrB[j]是否相等。如果相等,说明可以从A中挑选该位置的字母用于构造B,因此将arrA[i]置为'*'表示已经使用过。
    • 将指针j后移一位,继续比较下一个位置的字母。
    • 如果指针j达到B的末尾,说明已经成功匹配了一个B,此时将计数变量count加1,并将指针ij重新置为0,以便继续寻找下一个匹配。
    • 如果指针j未达到B的末尾,说明当前位置的字母无法匹配,继续将指针i后移一位,继续寻找下一个可能的匹配。
  5. 循环结束后,输出计数变量count,即为最多可以同时从A中挑选的组数。

通过上述算法,我们可以有效地计算出最多可以同时从A中挑选多少组能够组成B的字符串。
在这里插入图片描述


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

相关文章

雪花算法记录

引子 伴随着业务的日渐庞大&#xff0c;单库单表的数据库可能无法支持业务的读写&#xff0c;需要对数据库进行分库分表。 原来数据库中&#xff0c;通常使用自增id的方式生成主键。分库分表之后&#xff0c;如果仍然采用原来的方式&#xff0c;在多个表之间主键会发生重复。 …

mysql和redis的同步

mysql和redis的同步 1 为什么使用redis做缓存 数据库链接慢&#xff0c;磁盘IO慢 mysql线程数不够 mybatis缓存&#xff0c;缓存在JVM中 redis缓存时基于内存的&#xff0c;速度快 若使用redis&#xff0c;如何保证redis和数据库同步问题 配置redis redis:url: redis://…

代码随想录算法训练营第五十一天 | 买卖股票3

309.最佳买卖股票时机含冷冻期 文档讲解&#xff1a;代码随想录 (programmercarl.com) 视频讲解&#xff1a;动态规划来决定最佳时机&#xff0c;这次有冷冻期&#xff01;| LeetCode&#xff1a;309.买卖股票的最佳时机含冷冻期_哔哩哔哩_bilibili 状态&#xff1a;dp定义看的…

小马识途:如何做好短视频内容运营

随着移动互联网普及&#xff0c;抖音和快手小红书这样的短视频平台已经成为这个时代最流行的内容承载形式。 短视频运营成为当下网络推广的一项重要任务&#xff0c;如何优化短视频呢&#xff1f;小马识途营销顾问就自身经历分享几点建议&#xff1a; 1、灵活的选题机制 内容选…

JavaScript实现循环读入整数进行累加,直到累加的和大于1000为止的代码

以下为实现循环读入整数进行累加&#xff0c;直到累加的和大于1000为止的程序代码和运行截图 目录 前言 一、循环读入整数进行累加&#xff0c;直到累加的和大于1000为止 1.1 运行流程及思想 1.2 代码段 1.3 JavaScript语句代码 1.4 运行截图 前言 1.若有选择&#xff0…

易观千帆 | 2023年4月证券APP月活跃用户规模盘点

易观&#xff1a;2023年4月证券服务应用活跃人数13924.88万人&#xff0c;相较上月&#xff0c;环比下降1.46%&#xff0c;同比增长3.64%&#xff1b;2023年4月自营类证券服务应用Top10 活跃人数6144.02万人&#xff0c;环比下降0.01%&#xff1b;2023年4月第三方证券服务应用T…

「远程开发」VSCode使用SSH远程linux服务器 - 公网远程连接(1)

文章目录 前言视频教程1、安装OpenSSH2、vscode配置ssh3. 局域网测试连接远程服务器4. 公网远程连接4.1 ubuntu安装cpolar内网穿透4.2 创建隧道映射4.3 测试公网远程连接 5. 配置固定TCP端口地址5.1 保留一个固定TCP端口地址5.2 配置固定TCP端口地址5.3 测试固定公网地址远程 转…

Kuberntes云原生实战08 Kubesphere 通过OIDC实现gitlab联合登录(全网唯一可用)

大家好,我是飘渺。 今天咱们继续更新Kubernetes云原生实战系列,本节文章将会打通公司用户体系,使用Gitlab中的用户完成登录认证。 为什么需要集成登录认证 KubeSphere 多租户是实际生产使用中非常需要的一个功能,该功能满足不同用户登录 KubeSphere 平台的需求。比如开发…