无锡网站建设网络推广,图形网站建设软件,电商系统功能模块,传媒网站后台免费模板题目 输入一个由n个大小写字母组成的字符串#xff0c;按照Ascii码值从小到大的排序规则#xff0c;查找字符串一中第k个最小ascii码值的字母(k 1)#xff0c;输出该字母所在字符串的位置索引(字符串的第一个字符位置索引为0)。 k如果大于字符串长度#xff0c;则输出最…题目 输入一个由n个大小写字母组成的字符串按照Ascii码值从小到大的排序规则查找字符串一中第k个最小ascii码值的字母(k 1)输出该字母所在字符串的位置索引(字符串的第一个字符位置索引为0)。 k如果大于字符串长度则输出最大ascii值的字母所在字符串的位置索引如果有重复的字母则输出字母的最小位置索引。 输入描述: 第一行输入一个由大小写字母组成的字符串 第二行输入kk必须大于0k可以大于输入字符串的长度 输出描述: 输出字符串中第k个最小 ascii码值的字母所在字符串的位置索引。k如果大于字符串长度则输出最大ascii值的字母所在字符串的位置索引如果第k个最小ascii码值的字母存在重复则输出该字母的最小位置索引。 示例1: 输入 AbCdeFG 3 输出 5 说明: 根据ASCII码值排序第三个ASCII码值的字母为FF在字符串中位置索引为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();kMath.min(str.length(),k);k--;Listint[] 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查看当前专栏更新的所有题目。