华为OD机试 - 字符串筛选排序 - 数组(Java 2022 Q4 100分)-LMLPHP

专栏导读

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

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

华为OD机试 - 字符串筛选排序 - 数组(Java 2022 Q4 100分)-LMLPHP

一、题目描述

输入一个由N个大小写字母组成的字符串,按照ASCII码值从小到大进行排序,查找字符串中第K个最小ASCII码值的字母(k>=1)。

输出该字母所在字符串中的位置索引(字符串的第一个位置索引为0)。

k如果大于字符串长度则输出最大ASCII码值的字母所在字符串的位置索引,如果有重复字母则输出字母的最小位置索引

二、输入描述

第一行输入一个由大小写字母组成的字符串

第二行输入k ,k必须大于0 ,k可以大于输入字符串的长度

三、输出描述

输出字符串中第k个最小ASCII码值的字母所在字符串的位置索引。

k如果大于字符串长度则输出最大ASCII码值的字母所在字符串的位置索引,如果第k个最小ASCII码值的字母存在重复 则输出该字母的最小位置索引。

四、解题思路

  1. 第一行输入一个由大小写字母组成的字符串
  2. 第二行输入k ,k必须大于0 ,k可以大于输入字符串的长度
  3. 按照ASCII码值从小到大进行排序
  4. 通过克隆备份一个字符串数组
  5. 查找字符串中第K个最小ASCII码值的字母
  6. 遍历克隆的未排序的字符串数组
  7. 输出该字母所在字符串中的位置索引

五、Java算法源码

package com.guor.od;

import java.util.*;

public class OdTest01 {

    /**
     * 查找字符串中第K个最小ASCII码值的字母
     */
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        // 第一行输入一个由大小写字母组成的字符串
        String input = sc.nextLine();
        // 第二行输入k ,k必须大于0 ,k可以大于输入字符串的长度
        int k = Integer.valueOf(sc.nextLine());
        char[] arr = input.toCharArray();
        char obj = ' ';
        char[] cloneArr = arr.clone();

        // 按照ASCII码值从小到大进行排序
        Arrays.sort(arr);
        if (k > arr.length) {
            obj = arr[arr.length - 1];
        } else {
            // 查找字符串中第K个最小ASCII码值的字母
            obj = arr[k - 1];
        }

        for (int i = 0; i < cloneArr.length; i++) {
            // 输出该字母所在字符串中的位置索引
            if (obj == cloneArr[i]) {
                System.out.println(i);
                break;
            }
        }
    }
}

六、效果展示

1、输入

AbCdeFG
3

2、输出

5

3、说明

华为OD机试 - 字符串筛选排序 - 数组(Java 2022 Q4 100分)-LMLPHP


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

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

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

华为OD机试 - 字符串筛选排序 - 数组(Java 2022 Q4 100分)-LMLPHP

08-26 03:10