华为OD机试 - 找出符合要求的字符串子串(Java 2022 Q4 100分)

在这里插入图片描述

目录

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

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

专栏导读

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

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

一、题目描述

给定两个字符串,从字符串2中找出字符串1中的所有字符,去重并按照ASCII值从小到大排序。

输入字符串1:长度不超过1024
输入字符串2:长度不超过1000000

字符范围满足ASCII编码要求,按照ASCII的值由小到大排序。

二、输入描述

bach
bbaaccedfg

三、输出描述

abc

输入字符串1 为给定字符串bach,输入字符串2 bbaaccedfg

从字符串2中找出字符串1的字符,去除重复的字符,并且按照ASCII值从小到大排序,得到输出的结果为abc。

字符串1中的字符h在字符串2中找不到不输出。

四、解题思路

根据题意:

从字符串2中找出字符串1中的所有字符,去重并按照ASCII值从小到大排序。

核心思想:

  1. 通过Set去重;
  2. 再通过list.sort按照ASCII值从小到大排序。

五、Java算法源码

package com.guor.od;

import java.util.*;

public class OdTest01 {

    /**
     * 从字符串2中找出字符串1中的所有字符,去重并按照ASCII值从小到大排序
     */
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String str1 = scanner.nextLine();
        String str2 = scanner.nextLine();

        // 通过Set去重
        Set<Character> set1 = new HashSet<>();
        for (char c : str1.toCharArray()) {
            set1.add(c);
        }

        Set<Character> set2 = new HashSet<>();
        for (char c : str2.toCharArray()) {
            set2.add(c);
        }

        // 字符串1在字符串2中存在的字符集合
        List<Character> list = new ArrayList<Character>();
        // 遍历set1,看它是否在set2中存在,
        for (char c : set1) {
            // 如果存在,则加入list
            if (set2.contains(c)) {
                list.add(c);
            }
        }

        // 按照ASCII值从小到大排序
        list.sort(new Comparator<Character>() {
            @Override
            public int compare(Character o1, Character o2) {
                if (o1 < o2) {
                    return -1;
                } else if (o1 > o2) {
                    return 1;
                } else {
                    return 0;
                }
            }
        });

        // 去重并按照ASCII值从小到大排序输出
        for (Character c : list) {
            System.out.print(c);
        }
    }
}

六、效果展示

1、输入

nezha
nezhaloveslearningjava

2、输出

aehnz

3、说明

  1. str1去重:[a, e, h, z, n];
  2. str2去重:[a, e, g, h, i, j, l, n, o, r, s, v, z];
  3. 字符串1在字符串2中存在的字符集合:[a, e, h, z, n];
  4. 按照ASCII值从小到大排序输出aehnz

华为OD机试 - 找出符合要求的字符串子串(Java 2022 Q4 100分)_第1张图片


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

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

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

在这里插入图片描述

你可能感兴趣的:(搬砖工逆袭Java架构师,华为od,java,开发语言,七日集训,学习,送书,1024程序员节)