【华为OD题库-071】字符串筛选排序-java

news/2024/7/5 5:20:14

题目

输入一个由n个大小写字母组成的字符串,按照Ascii码值从小到大的排序规则,查找字符串一中第k个最小ascii码值的字母(k>= 1),输出该字母所在字符串的位置索引(字符串的第一个字符位置索引为0)。
k如果大于字符串长度,则输出最大ascii值的字母所在字符串的位置索引,如果有重复的字母,则输出字母的最小位置索引。
输入描述:
第一行输入一个由大小写字母组成的字符串
第二行输入k,k必须大于0,k可以大于输入字符串的长度
输出描述:
输出字符串中第k个最小 ascii码值的字母所在字符串的位置索引。k如果大于字符串长度,则输出最大ascii值的字母所在字符串的位置索引,如果第k个最小ascii码值的字母存在重复,则输出该字母的最小位置索引。
示例1:
输入
AbCdeFG
3
输出
5
说明:
根据ASCII码值排序,第三个ASCII码值的字母为F,F在字符串中位置索引为5(0为字符串的第一个字母位置索引)
示例2:
输入:
fAdDAkBbBq
4
输出:
6
说明:
根据ASCII码值排序前4个字母为AABB由于B重复则只取B的第一个最小位置索引6,而不是第二个B的位置索引8

思路

将输入按照ascii码升序,索引升序排序,取第k个值的索引即可
如果k大于输入字符串长度,k等于str.length
如果取到的字符有多个,则找到最前面的那个(索引最小)

题解

package hwod;

import java.util.*;

public class StringSort {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String str = sc.nextLine();
        int n = sc.nextInt();
        System.out.println(stringSort(str, n));
    }

    // 按ascii码升序,索引升序排序
    private static int stringSort(String str, int k) {
        char[] chars = str.toCharArray();
        k=Math.min(str.length(),k);
        k--;
        List<int[]> list = new ArrayList<>();
        for (int i = 0; i < chars.length; i++) {
            list.add(new int[]{chars[i], i});
        }
        list.sort((o1, o2) -> {
            if (o1[0] != o2[0]) return o1[0] - o2[0];
            return o1[1] - o2[1];
        });
        //找到最前面的相同值
        int j = k - 1;
        while (j >= 0 && list.get(j)[0] == list.get(k)[0]) {
            j--;
        }
        return list.get(j + 1)[1];


    }
}

推荐

如果你对本系列的其他题目感兴趣,可以参考华为OD机试真题及题解(JAVA),查看当前专栏更新的所有题目。


http://lihuaxi.xjx100.cn/news/1869665.html

相关文章

C++ day52 最长递增子序列 最长连续递增子序列 最长重复子数组

题目1&#xff1a;300 最长递增子序列 题目链接&#xff1a;最长递增子序列 对题目的理解 找出整数数组中最长严格递增子序列的长度 动态规划 动规五部曲 1&#xff09;dp数组及下标i的含义 dp[i]&#xff1a;以nums[i]为结尾的最长递增子序列的长度 递增比较的时候&am…

.NET Core 依赖注入 Microsoft.Extensions.DependencyInjection(未完待续)

文章目录 前言什么是依赖注入C# 使用依赖注入框架介绍 Microsoft.Extensions.DependencyInjectionNuget安装简单单例使用打印结果 暂时结束 前言 依赖注入是一个非常重要的编程思想&#xff0c;就和面向过程和面向对象一样&#xff0c;IOC和控制反转是一种解耦的编程思想。 什…

Java八股文面试全套真题【含答案】- AJAX Axios篇

AJAX 是什么&#xff1f;它的全称是什么&#xff1f; 答案&#xff1a;AJAX 是 Asynchronous JavaScript and XML&#xff08;异步 JavaScript 和 XML&#xff09;的缩写。它是一种用于在后台与服务器进行数据交换的技术&#xff0c;实现异步加载数据而无需刷新整个页面。AJAX …

【100天精通Python】Day75:Python机器学习-第一个机器学习小项目_鸾尾花分类项目(上)

目录 1 机器学习中的Helloworld _鸾尾花分类项目 2 导入项目所需类库和鸾尾花数据集 2.1 导入类库 2.2 scikit-learn 库介绍 &#xff08;1&#xff09;主要特点&#xff1a; &#xff08;2&#xff09;常见的子模块&#xff1a; 3 导入鸾尾花数据集 3.1 概述数据 3.…

记录 | linux下互换键盘的Ctrl和CapsLock键

互换ctrl和CapsLK setxkbmap -option "ctrl:swapcaps"打开设置文件&#xff1a; sudo vim /etc/default/keyboard将其中的XKBOPTIONS中添加ctrl:swapcaps即可&#xff0c;如下所示&#xff1a; # KEYBOARD CONFIGURATION FILE# Consult the keyboard(5) manual pa…

WordPiece词表的创建

文章目录 一、简单介绍二、步骤流程2.1 预处理2.2 计数2.3 分割2.4 添加subword 三、代码实现 本篇内容主要介绍如何根据提供的文本内容创建 WordPiece vocabulary&#xff0c;代码来自谷歌&#xff1b; 一、简单介绍 wordpiece的目的是&#xff1a;通过考虑单词内部构造&…

Hadoop学习笔记(HDP)-Part.18 安装Flink

目录 Part.01 关于HDP Part.02 核心组件原理 Part.03 资源规划 Part.04 基础环境配置 Part.05 Yum源配置 Part.06 安装OracleJDK Part.07 安装MySQL Part.08 部署Ambari集群 Part.09 安装OpenLDAP Part.10 创建集群 Part.11 安装Kerberos Part.12 安装HDFS Part.13 安装Ranger …

【3】密评-物理和环境安全测评

0x01 依据 GB/T 39786 -2021《信息安全技术 信息系统密码应用基本要求》针对等保三级系统要求&#xff1a; 物理和环境层面&#xff1a; a&#xff09;宜采用密码技术进行物理访问身份鉴别,保证重要区域进入人员身份的真实性&#xff1b; b&#xff09;宜采用密码技术保证电子门…