当前位置: 首页 > 面试经验 >

2024华为OD机试真题 - 字符串分割(二) JAVA代码

优质
小牛编辑
122浏览
2024-08-14

2024华为OD机试真题 - 字符串分割(二) JAVA代码

2024华为OD机试真题,代码包含语言java 代码基本都有详细注释。

题目描述

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

对于新组成的每一个子串,如果它含有的小写字母比大写字母多,则将这个子串的所有大写字母转换为小写字母;

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

输入描述

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

输出描述

输出转换后的字符串。

用例

输入

3

12abc-abCABc-4aB@

输出

12abc-abc-ABC-4aB-@

说明

子串为12abc、abCABc、4aB@,第一个子串保留,

后面的子串每3个字符一组为abC、ABc、4aB、@,

abC中小写字母较多,转换为abc,

ABc中大写字母较多,转换为ABC,

4aB中大小写字母都为1个,不做转换,

@中没有字母,连起来即12abc-abc-ABC-4aB-@

输入

12

12abc-abCABc-4aB@

输出

12abc-abCABc4aB@

说明

子串为12abc、abCABc、4aB@,第一个子串保留,

后面的子串每12个字符一组为abCABc4aB@,

这个子串中大小写字母都为4个,不做转换,

连起来即12abc-abCABc4aB@

声明

上述内容部分整理自考生的真实反馈以及网络资源的搜集,我们始终尊重原作者的权益。如若发现任何内容侵犯了您的版权,敬请及时与我们取得联系,我们将立即进行删除处理。

此外,本材料后续的解析与代码部分均为我方原创思考与分析,凝聚了我们的心血与智慧。我们恳请各位尊重原创,切勿随意搬运或抄袭,共同维护良好的学术与创作环境。谢谢!

订阅后可看完整内容,试看真题如下:

华为OD机试真题 - 剩余银饰的重量 (D卷,100分)

111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111

题目解析

我们需要明确题目的要求。题目给定了一个非空字符串S,该字符串被N-分隔成N+1个子串。接着,题目还提供了一个正整数K,要求我们按照以下规则对字符串S进行处理:

  1. 第一个子串保持不变。
  2. 从第二个子串开始,我们将其按照每K个字符进行分组,形成新的子串。
  3. 对于每个新形成的子串,我们需要判断其中小写字母和大写字母的数量。如果小写字母数量多于大写字母,则将整个子串中的大写字母转换为小写字母。如果大写字母数量多于小写字母,则将整个子串中的小写字母转换为大写字母。如果大小写字母数量相等,则不进行任何转换。

接下来,我们可以按照以下步骤来实现这个算法:

  1. 读取输入:首先,我们需要从输入中读取正整数K和字符串S
  2. 分割字符串:将字符串S按照-进行分割,得到子串列表。
  3. 处理子串:第一个子串保持不变,直接添加到结果字符串中。从第二个子串开始,按照每K个字符进行分组,形成新的子串列表。遍历每个新形成的子串,判断其中小写字母和大写字母的数量,并根据规则进行转换。将转换后的子串用-连接起来,并添加到结果字符串中。
  4. 输出结果:最后,将结果字符串输出。

Java算法源码

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        int k = sc.nextInt();
        String s = sc.next();

        System.out.println(getResult(k, s));
    }

    public static String getResult(int k, String s) {
        String[] arr = s.split("-");

        StringBuilder sb = new StringBuilder(arr[0]);
        for (int i = 1; i < arr.length; i++) {
            sb.append(convert(arr[i]));
        }

        String newStr = sb.toString();
        StringBuilder result = new StringBuilder();
        for (int i = 0; i < newStr.length(); i += k) {
            String subStr = newStr.substring(i, Math.min(i + k, newStr.length()));
            result.append(convert(subStr));
            if (i + k < newStr.length()) {
                result.append("-");
            }
        }

        return result.toString();
    }

    public static String convert(String str) {
        long lowerCount = str.chars().filter(Character::isLowerCase).count();
        long upperCount = str.chars().filter(Character::isUpperCase).count();

        if (lowerCount > upperCount) return str.toLowerCase();
        else if (lowerCount < upperCount) return str.toUpperCase();
        else return str;
    }
}


#华为od##华为od题库##华为OD##华为OD机试真题##华为#
 类似资料: