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

news2024/9/20 1:01:28

请添加图片描述

✅创作者:陈书予
🎉个人主页:陈书予的个人主页
🍁陈书予的个人社区,欢迎你的加入: 陈书予的社区
🌟专栏地址: 华为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);
    // 可能存在重复字母的字符串A
    String a = sc.nextLine();
    // 不存在重复字母的字符串B
    String 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了,则重新置0
        if (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.coloradmin.cn/o/565791.html

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

相关文章

配电室智能监控系统设计及实现分析

摘 要&#xff1a;配电室作为电网正常运行中的基础性设施&#xff0c;在信息化建设中处于信息交换管理的核心位置&#xff0c;这就要求配电室内所有设备须时时刻刻正常运转&#xff0c;一旦某台设备出现故障&#xff0c;对数据传输、存储及系统运行构成威胁&#xff0c;就会影…

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

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

Microsoft Office 2019安装

哈喽&#xff0c;大家好。今天一起学习的是office2019的安装&#xff0c;有兴趣的小伙伴也可以来一起试试手。 一、测试演示参数 演示操作系统&#xff1a;Windows 10 支持Win11安装&#xff0c;不支持Win7、XP系统 系统类型&#xff1a;64位 演示版本&#xff1a;cn_office_…

【C++】——动态内存管理

目录 &#x1f31e;导读 &#x1f314;C/C内存分布 &#x1f314;C内存管理方式 &#x1f317;new/delete操作内置类型 &#x1f317;new和delete的使用方法 &#x1f314;operator new与operator delete函数 &#x1f314;new和delete的实现原理 &#x1f317;内置…

Python篇——数据结构与算法(第三部分:归并排序;快速、归并、堆排序小结;深拷贝和浅拷贝区别)

1、归并排序——归并 假设现在的列表分为两段有序&#xff0c;如何将其合成为一个有序列表这种操作称为一次归并 归并过程描述&#xff1a;&#xff08;前提是两段列表分别有序&#xff09; 两段有序列表进行对比&#xff0c;1和2进行对比选出最小的数&#xff0c;1出列&#x…

chatgpt赋能python:Python中的soup.find()方法详解

Python中的soup.find()方法详解 Python语言的简洁、易读性和快速开发的特点已经成为了程序员们的首选语言。其中&#xff0c;BeautifulSoup库作为一个非常好用的库&#xff0c;可以用于解析HTML/XML文档&#xff0c;提取出需要的信息。soup.find()方法是BeautifulSoup库中的一…

chatgpt赋能python:PythonWord目录的介绍

Python Word 目录的介绍 Python 是一种高级编程语言&#xff0c;已经成为世界上最流行的程序设计语言之一。在 Python 中&#xff0c;我们可以使用一些库和模块来完成各种任务&#xff0c;例如文本处理和文件操作。 一个很常见的文本处理任务就是生成和编辑 Microsoft Word 文…

day1 - OpenCV安装与环境配置

本期我们介绍 OpenCV 的背景知识以及如何安装 OpenCV 。 完成本期内容&#xff0c;你可以&#xff1a; 了解 OpenCV 的背景知识掌握安装 OpenCV 及其拓展库 若要运行案例代码&#xff0c;你需要有&#xff1a; 操作系统&#xff1a;Ubuntu 16 以上 或者 Windows10 工具软件…

chatgpt赋能python:PythonTables:为你的数据处理带来更高效的解决方案

Python Tables&#xff1a;为你的数据处理带来更高效的解决方案 Python是一种功能强大且易于使用的编程语言&#xff0c;可以用于各种用途。对于数据处理和分析来说&#xff0c;Python是一个非常受欢迎的选择&#xff0c;因为它有许多强大的库和工具可以使用。其中一个很有用的…

pkcs8-rfc5958

非对称密钥包摘要 本文档定义了私钥信息的语法及其内容类型。 私钥信息包括指定公钥算法的私钥和一组属性。 RFC 5652 中定义的加密消息语法 (CMS) 可用于对非对称密钥格式内容类型进行数字签名、摘要、验证或加密。 本文档废弃了 RFC 5208。 本备忘录的状态 这是一份 Internet…

多线程详解(理论与实践的最佳融合方案)

一.概述 线程简介 总而言之&#xff0c;就是在同一时间&#xff0c;做了不同的事情&#xff0c;正所谓一石二鸟&#xff0c;一箭双雕&#xff0c;赔了夫人又折兵 生活中很多事情都可以看作是多线程的例子。比如&#xff1a; 煮饭&#xff1a;煮饭需要同时加热米饭和煮菜&#…

阿里拆了中台,中台还有未来吗?

hi&#xff0c;我是熵减&#xff0c;见字如面。 近日&#xff0c;阿里在继年初3月份的16N的战略变革的基础上&#xff0c;对持续建设和运营8年的中台的调整终于落地了。 阿里对中台的这一举措&#xff0c;引发了外界对于中台战略是否还有意义的大量质疑和讨论。 甚至有人将中台…

分享一些冷门好用的网站和软件

分享一&#xff1a;UZER UZER是一个功能强大的云端应用空间&#xff0c;可以帮助您将所有的文件和应用程序都集中在一个地方&#xff0c;让您随时随地轻松访问。 以下是它的主要特点&#xff1a; 云存储&#xff1a;UZER提供大量的云存储空间&#xff0c;让您可以安全地存储…

【C++初阶】C++——模板初阶与泛型编程

​ ​&#x1f4dd;个人主页&#xff1a;Sherry的成长之路 &#x1f3e0;学习社区&#xff1a;Sherry的成长之路&#xff08;个人社区&#xff09; &#x1f4d6;专栏链接&#xff1a;C初阶 &#x1f3af;长路漫漫浩浩&#xff0c;万事皆有期待 文章目录 1. 泛型编程2. 函数模板…

C#,码海拾贝(23)——线性方程组求解的复系数方程组的全选主元高斯消去法之C#源代码,《C#数值计算算法编程》源代码升级改进版

using System; namespace Zhou.CSharp.Algorithm { /// <summary> /// 求解线性方程组的类 LEquations /// 原作 周长发 /// 改编 深度混淆 /// </summary> public static partial class LEquations { /// <summary&g…

MyBatis-Plus03_分页插件、自定义分页、乐观锁

目录 ①. 分页插件 ②. xml自定义分页 ③. 乐观锁 ①. 分页插件 ①. MyBatis Plus自带分页插件,只要简单的配置即可实现分页功能 ②. 添加配置类 Configuration public class MybatisPlusConfig {Beanpublic MybatisPlusInterceptor mybatisPlusInterceptor(){MybatisPlu…

MyBatis-Plus02 条件构造器QueryWrapper、UpdateWrapper、Condition、LambdaQuery用法详解

目录 ①. 条件构造器与常用的接口 ②. QueryWrapper ③. UpdateWrapper ④. Condition——简化代码开发 ⑤. LambdaQueryWrapper ⑥. LambdaUpdateWrapper ①. 条件构造器与常用的接口 ①. Wrapper介绍&#xff1a; 条件构造器&#xff08;Wrapper&#xff09;的作用&…

【mmcv安装使用】

文章目录 一、前言二、mmcv安装1.安装方案a2.安装方案b 三、mmclassification使用1.目录说明2.数据集3.根据自己数据修改文件4.demo测试5.测试结果6.数据增强可视化7.日志分析 个人网站 一、前言 MMLab是香港中文大学深圳研究院的一个计算机视觉和深度学习研究团队&#xff0c…

chatgpt赋能python:PythonUSBHID:利用Python控制USB设备

Python USB HID: 利用Python控制USB设备 简介 USB HID&#xff08;Human Interface Device&#xff09;是一种USB设备类型&#xff0c;它允许用户与设备进行交互。许多设备&#xff0c;如键盘、鼠标、游戏控制器等&#xff0c;都使用USB HID协议进行通信。 Python是一种强大…

chatgpt赋能python:PythonUp:优秀的Python教育平台

Python Up: 优秀的Python教育平台 Python学习的重要性 随着大数据、人工智能等技术的蓬勃发展&#xff0c;Python作为一种可读性强、代码简洁、可扩展性好的编程语言&#xff0c;已经成为数据科学领域中最受欢迎的编程语言之一。因此&#xff0c;Python学习已成为现在最流行的…