题目描述
输入一个由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 |
题目解析
简单的字符串操作题。
2023.05.20 补充了第二个用例
根据第二个用例来看,题目要找的第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("%lldn", strchr(s, target) - s);
return 0;
}
免责声明:
1、IT资源小站为非营利性网站,全站所有资料仅供网友个人学习使用,禁止商用
2、本站所有文档、视频、书籍等资料均由网友分享,本站只负责收集不承担任何技术及版权问题
3、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除下载链接并致以最深的歉意
4、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
5、一经注册为本站会员,一律视为同意网站规定,本站管理员及版主有权禁止违规用户
6、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和IT资源小站的同意
7、IT资源小站管理员和版主有权不事先通知发贴者而删除本文
评论0