华为OD机试 - 字符串分割(Java 2023 B卷 100分)

news2024/9/21 12:28:24

在这里插入图片描述

目录

    • 专栏导读
    • 一、题目描述
    • 二、输入描述
    • 三、输出描述
    • 四、解题思路
      • 1、根据题意:
      • 2、例如:
      • 3、解题思路:
    • 五、Java算法源码
    • 六、效果展示
      • 1、输入
      • 2、输出
      • 3、说明

华为OD机试 2023B卷题库疯狂收录中,刷题点这里

专栏导读

本专栏收录于《华为OD机试(JAVA)真题(A卷+B卷)》。

刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。

一、题目描述

给定一个非空字符串S,其被N个‘-’分隔成N+1的子串,给定正整数K,要求除第一个子串外,其余的子串每K个字符组成新的子串,并用‘-’分隔。

对于新组成的每一个子串,如果它含有的小写字母比大写字母多,则将这个子串的所有大写字母转换为小写字母;反之,如果它含有的大写字母比小写字母多,则将这个子串的所有小写字母转换为大写字母;大小写字母的数量相等时,不做转换。

二、输入描述

输入为两行,第一行为参数K,第二行为字符串S。

三、输出描述

输出转换后的字符串。

输入输出说明
3 12abc-abCABc-4aB@12abc-abc-ABC-4aB-@
12 12abc-abCABc-4aB@12abc-abCABc4aB@

四、解题思路

题目刷多了的话,一看这道题,第一反应就是没意思。。

完全根据题意去做就可以了,美其名曰“逻辑分析”。

1、根据题意:

要求除第一个子串外,其余的子串每K个字符组成新的子串,并用‘-’分隔。
对于新组成的每一个子串,如果它含有的小写字母比大写字母多,则将这个子串的所有大写字母转换为小写字母;
反之,如果它含有的大写字母比小写字母多,则将这个子串的所有小写字母转换为大写字母;
大小写字母的数量相等时,不做转换。

2、例如:

  • 3
  • 12abc-abCABc-4aB@
  • 12abc-abc-ABC-4aB-@

秒懂吧?

3、解题思路:

  1. 先取出第一个字符串,特殊处理;
  2. 将剩余字符串的分隔符全部替换掉;
  3. 每K个字符进行一次分割;
  4. 根据题意,进行大小写转换,再用分隔符-拼接;
  5. 最后输出转换后的字符串。

五、Java算法源码

package com.guor.od;

import java.util.*;

public class OdTest02 {

    /**
     * 要求除第一个子串外,其余的子串每K个字符组成新的子串,并用‘-’分隔。
     * <p>
     * 对于新组成的每一个子串,如果它含有的小写字母比大写字母多,则将这个子串的所有大写字母转换为小写字母;
     * 反之,如果它含有的大写字母比小写字母多,则将这个子串的所有小写字母转换为大写字母;
     * 大小写字母的数量相等时,不做转换。
     *
     * 3
     * 12abc-abCABc-4aB@
     * 12abc-abc-ABC-4aB-@
     */
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int K = Integer.valueOf(sc.nextLine());
        String S = sc.nextLine();
        // 除第一个子串外
        String first = S.split("-")[0];

        StringBuilder builder = new StringBuilder();
        builder.append(first).append("-");

        // 除了第一个字符串的余下字符串
        String line = S.replaceFirst(first + "-", "").replace("-", "");

        // 不满K个字符,直接拼接
        if (line.length() <= K) {
            builder.append(line).append("-");
        } else {
            while (line.length() > 0) {
                // 每K个字符一截取
                if (line.length() > K) {
                    String temp = line.substring(0, K);
                    line = line.replaceFirst(temp, "");
                    builder.append(transfer(temp)).append("-");
                } else {
                    builder.append(transfer(line)).append("-");
                    line = "";
                }
            }
        }
        // 去掉最后一个-
        builder.deleteCharAt(builder.length()-1);
        System.out.println(builder);
    }

    /**
     * 如果它含有的小写字母比大写字母多,则将这个子串的所有大写字母转换为小写字母;
     * 反之,如果它含有的大写字母比小写字母多,则将这个子串的所有小写字母转换为大写字母;
     * 大小写字母的数量相等时,不做转换。
     */
    static String transfer(String str) {
        int upper = 0;
        int lower = 0;
        char chArr[] = str.toCharArray();
        for (char c : chArr) {
            if (c >= 'a' && c <= 'z') {
                lower++;
            }else if(c >= 'A' && c <= 'Z'){
                upper++;
            }
        }
        if (upper > lower) {
            str = str.toUpperCase();
        } else if (upper < lower) {
            str = str.toLowerCase();
        }
        return str;
    }
}

六、效果展示

1、输入

3
Nezha-Loves-@LEarnIng-##Java

2、输出

Nezha-lov-es@-LEA-rni-ng#-#Ja-va

3、说明

  1. 除第一个子串外,Nezha-
  2. 剩余字符串,去掉分隔符-,Loves@LEarnIng##Java
  3. 每3个进行分割,Lov-es@-LEa-rnI-ng#-#Ja-va
  4. 大写小写转换(哪个少转哪个,相等则不转),变为lov-es@-LEA-rni-ng#-#Ja-va
  5. 最后输出Nezha-lov-es@-LEA-rni-ng#-#Ja-va

在这里插入图片描述


🏆下一篇:华为OD机试真题 Java 实现【简易内存池】【2023 B卷 200分 考生抽中题】

🏆本文收录于,华为OD机试(JAVA)真题(A卷+B卷)

刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。

在这里插入图片描述

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

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

相关文章

温习下git同步本地代码至远程仓库

本地服务推远程git仓库&#xff1a; 1、远程git仓库或者云效服务创建服务名生产 ssh代码路径 2、进入本地项目文件夹git init 初始化git仓库 3、git remote add origin ssh(远程origin路径) 4、git add . 添加当前文件至暂存区 5、git commit -m "Initial commit"提交…

stable diffusion实践操作-安装

本文专门开一节写安装相关的内容&#xff0c;在看之前&#xff0c;可以同步关注&#xff1a; stable diffusion实践操作 正文 1、 秋葉一键安装包 github安装&#xff1a;https://github.com/AUTOMATIC1111/stable-diffusion-webui 秋叶安装&#xff1a;[b站教程和下载安装包…

按钮控件之1---QPushButton 标准按钮/普通按钮控件

1、父类QAbstractButton 2、QPushButton按钮&#xff0c;是Qt常用的控件之一&#xff0c;提供普通的按钮功能。 通过信号槽机制接收触发信号并执行对应动作。3、创建QPushButton 它有三个构造函数&#xff1a; // 空对象 QPushButton(QWidget *parent nullptr); // 指定QPus…

【Dots之008】TransformUsageFlags基础知识

一、基础介绍 在Baker中进行GetEntity对象的时候&#xff0c;需要填入TransformUsageFlags类型的参数&#xff1b;针对不同类型的参数&#xff0c;看看GameObject所转换后的IComponentData有什么差异&#xff1b; 演示代码&#xff1a; public class CubeAuthoring : MonoBe…

ITIL 4—创建、交付和支持—利用信息和技术创建、交付和支持服务

3.1 集成和数据共享 服务设计通常依赖于多个系统之间的集成&#xff08;integration&#xff09;&#xff0c;在这种情况下&#xff0c;理解集成建模的不同层次相当重要。例如&#xff1a; 应用程序级 应用程序之间是相互交互的。企业级 已集成的应用程序共同提供价值。业务…

计算机/嵌入式入门教材资料

背景 自学计算机&#xff0c;首先我们要找到好的教材、教程&#xff0c;可以事半功倍。 目前&#xff0c;互联网上计算机资源较多&#xff0c;难的不再是寻找资源&#xff0c;而是筛选出质量比较高的资源。 基于笔者经验&#xff0c;推荐以下资源。 书籍 传统的书籍是纸质版…

云存储:实现数据备份与恢复的创新方法

文章目录 云存储的基本概念数据备份的创新方法自动化备份策略增量备份和版本控制多地点备份 数据恢复的创新方法快速数据恢复弹性扩展性数据验证和一致性 案例分析&#xff1a;AWS S3自动化备份策略增量备份和版本控制多地点备份快速数据恢复数据验证和一致性 结论 &#x1f38…

不会还有人排长队吃饭吧?用这招,快速搞定!

随着现代企业对员工福利和工作环境的关注不断增加&#xff0c;企业智慧食堂已经成为了企业管理的重要组成部分。 智慧收银系统的出现不仅使员工用餐变得更加便捷和高效&#xff0c;还提供了一种强大的管理工具&#xff0c;有助于企业更好地理解员工消费行为、优化食堂运营&…

安卓10创建文件夹失败

最近在做拍照录像功能&#xff0c;已经有了文件读写权限&#xff0c;却发现在9.0手机上正常使用&#xff0c;但是在安卓12系统上根本没有创建文件夹。经过研究发现&#xff0c;创建名称为“DCIM”的文件夹可以&#xff0c;别的又都不行。而且是getExternalStorageDirectory和ge…

史上最细 B+Tree 解读

前言&#xff1a; BTree 经过几十年的发展已经成为 OLTP 数据库的首选索引结构&#xff0c;深入分析开始前先介绍一些书籍给大家&#xff0c;BTree 的演进非常的复杂&#xff0c;有很多的大牛论文都做出了很关键的指导性作用&#xff0c;就算当前还是在不断探索优化的可能&…

js实现图形验证码

图形验证码起什么作用&#xff1a; 可以防止&#xff1a;恶意破解密码、刷票、论坛灌水&#xff0c;有效防止某个黑客对某一个特定注册用户用特定程序暴力破解方式进行不断的登录尝试。 验证码一般是防止批量注册的&#xff0c;人眼看起来都费劲&#xff0c;何况是机器。不少…

让企业主们头疼的mkp勒索病毒,究竟有何来历,勒索病毒解密

mkp勒索病毒是一种比较常见的电脑病毒&#xff0c;它会对感染的电脑进行加密&#xff0c;并要求用户支付一定的赎金才能解锁。这种病毒已经引起了全球范围内的关注&#xff0c;因为它已经造成了严重的经济损失和电脑系统崩溃。 mkp勒索病毒是一种相对较新的病毒&#xff0c;但是…

【MySQL系列】索引的学习及理解

「前言」文章内容大致是MySQL索引的学习。 「归属专栏」MySQL 「主页链接」个人主页 「笔者」枫叶先生(fy) 目录 一、索引概念二、从硬件角度理解2.1 磁盘2.2 结论 三、从软件角度理解四、共识五、索引的理解5.1 一个现象和结论5.2 对Page进行建模5.3 索引可以采用的数据结构5.…

大数据组件Sqoop-安装与验证

&#x1f947;&#x1f947;【大数据学习记录篇】-持续更新中~&#x1f947;&#x1f947; 个人主页&#xff1a;beixi 本文章收录于专栏&#xff08;点击传送&#xff09;&#xff1a;【大数据学习】 &#x1f493;&#x1f493;持续更新中&#xff0c;感谢各位前辈朋友们支持…

NowCoder刷题 Python篇

NowCoder刷题 Python篇 Python入门 01 输入输出输入输出NP1 Hello World!NP2 多行输出NP3 读入字符串 01 输入输出 输入输出 NP1 Hello World! 参考代码&#xff1a; str Hello World! print(str)结果&#xff1a; NP2 多行输出 参考代码&#xff1a; str1 Hello World!…

上层应用开发与底层开发前途相比

底层开发和应用层开发都有自己的前途和发展方向&#xff0c;没有绝对的优劣之分。以下是对底层开发和应用层开发的一些观点&#xff1a;底层开发&#xff1a;优势&#xff1a;对计算机系统底层原理和技术有深入了解&#xff0c;能够进行系统级编程和优化&#xff0c;掌握底层技…

python爬虫—requests

一、安装 pip install requests 二、基本使用 1、基本使用 类型 &#xff1a; models.Response r.text : 获取网站源码 r.encoding &#xff1a;访问或定制编码方式 r.url &#xff1a;获取请求的 url r.content &#xff1a;响应的字节类型 r.status_code &#xff1a;响应…

在Mac终端使用unrar和rar 解压和压缩软件

1、首先从rarlab 网站下载 rar &#xff0f; unrar 工具 rarlab网站&#xff1a; https://www.rarlab.com/download.htm 2、解压缩下载的 tar.gz 压缩包&#xff08;rarmacos-x64-623.tar.gz&#xff09;&#xff0c;在下载目录downloads下自动创建一个rar的目录&#xff0c;其…

应用案例 | 基于三维机器视觉的机器人麻袋拆垛应用解决方案

​Part.1 项目背景 在现代物流和制造行业中&#xff0c;麻袋的拆垛操作是一个重要且频繁的任务。传统的麻袋拆垛工作通常由人工完成&#xff0c;分拣效率较低&#xff0c;人力成本较高&#xff0c;现场麻袋堆叠、变形严重&#xff0c;垛型不规则、不固定&#xff0c;严重影响分…

利用随机数生成猜数字游戏【C语言】

猜数字游戏实现 游戏要求生成随机数rand 函数srand 函数time 函数 确定生成随机数的范围猜数字游戏实现 游戏要求 自动生成随机数的范围&#xff1a;0-99玩家猜数字&#xff0c;猜数字的过程中&#xff0c;根据猜测数据的大小给出大了或小了的反馈&#xff0c;直到猜对&#x…