当前位置: 首页 > article >正文

机试题——第k大字母

题目描述

曾经有一个程序员,他正在为他的代码编写一个排序算法。他正在编写一个程序,该程序需要在字符串中查找第k个最小的ASCII码字母。他认为这是一个有趣的挑战,因为他要解决的问题涉及到字符串和排序,这些都是他喜欢的计算机科学领域。他经过一番研究后,终于开发出了一个能够解决这个问题的程序。

该程序接受一个由n个大小写字母组成的字符串及一个整数k作为输入,按照ASCII码值从小到大的排序规则查找字符串中第k个最小ASCII码值的字母。如果k大于字符串长度,则输出最大ASCII值的字母所在字符串的位置索引(字符串的第一个字符位置索引为0),如果有重复的字母,则输出字母的最小位置索引。现在,塔子哥的程序被广泛应用于各种排序任务中。

输入描述

输入包含两行:

  1. 第一行是一个字符串 ( S ),由大小写字母组成,长度不超过100。
  2. 第二行是一个整数 ( k ),表示需要查找的第k个最小ASCII码字母的位置索引。

输出描述

输出一个整数,表示第k个最小ASCII码字母在字符串中的位置索引(从0开始)。如果 ( k ) 大于字符串的长度,则输出最大ASCII值的字母所在字符串的位置索引。

用例输入

kjahah
4
3

解题思路

本题的目标是找到字符串中第k个最小的ASCII码字母的位置索引。主要步骤如下:

  1. 记录每个字符的首次出现位置和计数
    • 使用两个数组fircot分别记录每个字符的首次出现位置和出现次数。
    • 遍历字符串,更新每个字符的首次出现位置和计数。
  2. 处理特殊情况
    • 如果 ( k ) 大于字符串的长度,直接输出最大ASCII值的字母的位置索引。
  3. 查找第k个最小的ASCII码字母
    • 遍历所有可能的ASCII码值(从0到255),累加每个字符的计数,直到累加值大于等于 ( k )。
    • 输出该字符的首次出现位置。

代码

#include <iostream>
#include <vector>
#include <queue>
#include <sstream>
#include <string>
#include <stack>
#include <algorithm>
#include <map>
#include <iomanip>
using namespace std;
#define msize  105

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    string input;
    getline(cin, input); // 读取字符串
    vector<int> fir(256, -1); // 记录每个字符的首次出现位置
    vector<int> cot(256, 0);  // 记录每个字符的出现次数
    for (int i = 0; i < input.size(); i++) {
        if (fir[input[i]] == -1) fir[input[i]] = i; // 更新首次出现位置
        cot[input[i]]++; // 更新出现次数
    }
    int k;
    cin >> k; // 读取k值
    if (k >= input.size()) {
        // 如果k大于字符串长度,输出最大ASCII值的字母的位置索引
        for (int i = 255; i >= 0; i--) {
            if (fir[i] != -1) {
                cout << fir[i];
                return 0;
            }
        }
    }
    int cur = 0; // 当前累加的字符数量
    for (int i = 0; i < 256; i++) {
        cur += cot[i]; // 累加当前字符的出现次数
        if (cur >= k) {
            cout << fir[i]; // 输出第k个最小的ASCII码字母的位置索引
            return 0;
        }
    }
    return 0;
}

http://www.kler.cn/a/537504.html

相关文章:

  • 关于图像锐化的一份介绍
  • 两种交换排序算法--冒泡,快速
  • .Net Core笔记知识点(跨域、缓存)
  • 万字详解 MySQL MGR 高可用集群搭建
  • .net8.0使用EF连接sqlite数据库及使用Gridify实现查询的简易实现
  • 【Ubuntu】ARM交叉编译开发环境解决“没有那个文件或目录”问题
  • 【stm32学习】STM32F103实操primary(FlyMCU)
  • 解锁 DeepSeek 模型高效部署密码:蓝耘平台全解析
  • Oracle中与 NLS(National Language Support,国家语言支持) 相关的参数
  • 【AI学习】关于 DeepSeek-R1的几个流程图
  • 使用 Docker 和 PM2 构建高并发 Node.js API 网关
  • 基于java的美食信息推荐系统的设计与实现(LW+源码+讲解)
  • Linux C++语言函数调用栈打印
  • MySQL 8.0.41安装教程(2025年2月8号)
  • Spring Boot和SpringMVC的关系
  • kafka消费端之消费者协调器和组协调器
  • 2023 Java 面试题精选30道
  • 【ROS2】【2025】Simulate a 6DoF Robotic Arm in Gazebo and ROS2
  • Vue 入门到实战 八
  • Oracle Database Free版本的各项许可限制
  • Windows 实用设置工具 v3.6.5:一键优化系统设置
  • TCP三次握手全方面详解
  • SSD1306 128*32屏幕驱动
  • Java 读取 Word 模板文档并替换内容生成新文档
  • 探索C语言:寻找数组中连续1的最大长度
  • 软考网络安全 软考网络安全员