咸阳市网站建设_网站建设公司_VPS_seo优化
2026/1/16 17:42:19 网站建设 项目流程

(新卷,100分)- 字符串筛选排序(Java & JS & Python & C)

题目描述

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

按照ASCII码值从小到大进行排序

查找字符串中第K个最小ASCII码值的字母(k>=1)

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

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

如果有重复字母则输出字母的最小位置索引

输入描述

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

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

输出描述

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

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

如果第k个最小ASCII码值的字母存在重复 则输出该字母的最小位置索引

用例
输入AbCdeFG
3
输出5
说明

根据ASCII码值排序,第三个ASCII码值的字母为F

F在字符串中位置索引为5(0为字符串的第一个字母位置索引)

输入fAdDAkBbBq
4
输出6
说明

根据ASCII码值排序前4个字母为AABB由于B重复则只取B的第一个最小位置索引6

而不是第二个B的位置索引8

题目解析

简单的字符串操作题。


根据第二个用例来看,题目要找的第k个,不是去重+升序后的第k个,而只是排序后的第k个。

JavaScript算法源码
/* JavaScript Node ACM模式 控制台输入获取 */ const readline = require("readline"); const rl = readline.createInterface({ input: process.stdin, output: process.stdout, }); const lines = []; rl.on("line", (line) => { lines.push(line); if (lines.length === 2) { const [str, k] = lines; console.log(getKIndex(str, k)); lines.length = 0; } }); function getKIndex(str, k) { if (k > str.length) k = str.length; const tar = [...str].sort()[k - 1]; return str.indexOf(tar); }
Java算法源码
import java.util.Arrays; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String str = sc.next(); int k = sc.nextInt(); System.out.println(getResult(str, k)); } public static int getResult(String str, int k) { char[] chars = str.toCharArray(); Arrays.sort(chars); if (k > str.length()) k = str.length(); char tar = chars[k - 1]; return str.indexOf(tar); } }
Python算法源码
# 输入获取 s = input() k = int(input()) # 算法入口 def getResult(s, k): chars = list(s) chars.sort() if k > len(s): k = len(s) tar = chars[k - 1] return s.index(tar) # 调用算法 print(getResult(s, k))
C算法源码
#include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX_SIZE 10000 int cmp(const void* a, const void* b) { return (*(char*) a) - (*(char*) b); } int main() { char s[MAX_SIZE]; gets(s); int k; scanf("%d", &k); int n = strlen(s); char s_cp[n+1]; strcpy(s_cp, s); qsort(s_cp, n, sizeof(char), cmp); if(k > n) { k = n; } char target = s_cp[k - 1]; printf("%lld\n", strchr(s, target) - s); return 0; }

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询