首页 > 其他分享 >华为OD机试C卷(100分)-连续字母长度(C语言)

华为OD机试C卷(100分)-连续字母长度(C语言)

时间:2024-06-16 13:58:52浏览次数:23  
标签:count 子串 arr int OD C语言 ++ 机试 size

题目描述

给定一个字符串,只包含大写字母,求在包含同一字母的子串中,长度第 k 长的子串的长度,相同字母只取最长的那个子串。

输入描述

第一行有一个子串(1<长度<=100),只包含大写字母。

第二行为 k的值

输出描述

输出连续出现次数第k多的字母的次数。

用例

输入
AAAAHHHBBCDHHHH
3

输出 2
说明
同一字母连续出现的最多的是A和H,四次;

第二多的是H,3次,但是H已经存在4个连续的,故不考虑;

下个最长子串是BB,所以最终答案应该输出2。

输入
AABAAA
2

输出 1
说明
同一字母连续出现的最多的是A,三次;

第二多的还是A,两次,但A已经存在最大连续次数三次,故不考虑;

下个最长子串是B,所以输出1。

输入 ABC
4
输出 -1
说明 只含有3个包含同一字母的子串,小于k,输出-1
输入 ABC
2
输出 1
说明 三个子串长度均为1,所以此时k = 1,k=2,k=3这三种情况均输出1。特此说明,避免歧义。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

// Define a structure to represent the key-value mapping
struct KeyValue {
    char key;
    int value;
};

// Function to get the result
int getResult(char *s, int k) {
    if (k <= 0) return -1;

    int len = strlen(s);
    char *new_s = (char *)malloc((len + 2) * sizeof(char));
    strcpy(new_s, s);
    strcat(new_s, "0");

    struct KeyValue count[256]; // Assuming ASCII characters
    int count_size = 0;

    char b = new_s[0];
    int count_len = 1;

    for (int i = 1; i < len + 1; i++) {
        char c = new_s[i];

        if (b == c) {
            count_len++;
        } else {
            int found = 0;
            for (int j = 0; j < count_size; j++) {
                if (count[j].key == b) {
                    found = 1;
                    if (count[j].value < count_len) {
                        count[j].value = count_len;
                    }
                    break;
                }
            }
            if (!found) {
                count[count_size].key = b;
                count[count_size].value = count_len;
                count_size++;
            }
            count_len = 1;
            b = c;
        }
    }

    int arr[count_size];
    for (int i = 0; i < count_size; i++) {
        arr[i] = count[i].value;
    }

    if (k > count_size) return -1;
    else {
        for (int i = 0; i < count_size - 1; i++) {
            for (int j = i + 1; j < count_size; j++) {
                if (arr[i] < arr[j]) {
                    int temp = arr[i];
                    arr[i] = arr[j];
                    arr[j] = temp;
                }
            }
        }
        return arr[k - 1];
    }
}

int main() {
    char s[100];
    int k;

    printf("Enter the string: ");
    scanf("%s", s);
    printf("Enter k: ");
    scanf("%d", &k);

    int result = getResult(s, k);
    printf("Result: %d\n", result);

    return 0;
}

标签:count,子串,arr,int,OD,C语言,++,机试,size
From: https://blog.csdn.net/qq_45721938/article/details/139719408

相关文章

  • CodeForces 1935A
    题目链接:EntertainmentinMAC思路代码#include<bits/stdc++.h>usingnamespacestd;#definelllonglongconstintN=1e5+10;voidsolve(){lln;strings;cin>>n>>s;intl=0,len=s.size();while(s[l]==s[......
  • 华为OD刷题C卷 - 每日刷题33(小华最多能得到多少克黄金,智能成绩表)
    1、(小华最多能得到多少克黄金):这段代码是解决“小华最多能得到多少克黄金”的问题。它提供了一个Java类Main,其中包含main方法和dfs方法,以及辅助变量和getDigitSum方法,用于计算小华在地图上能收集到的最多黄金数量。main方法首先读取地图的行数m、列数n和数位之和阈值k。然......
  • 华为OD刷题C卷 - 每日刷题32(执行任务赚积分,计算三叉搜索树的高度)
    1、(执行任务赚积分):这段代码是解决“执行任务赚积分”的问题。它提供了一个Java类Main,其中包含main方法和getResult方法,用于计算在有限的时间内,处理任务可以获得的最多积分。main方法首先读取任务数量n和可用于处理任务的时间t,然后读取每个任务的最晚处理时间限制和积分值,......
  • 华为OD刷题C卷 - 每日刷题31(园区参观路径,围棋的气)
    1、(园区参观路径):这段代码是解决“园区参观路径”的问题。它提供了一个Java类Main,其中包含main方法和getResult方法,以及一个未使用的dfs方法,用于计算从园区起点到终点的不同参观路径数量。main方法首先读取园区的长和宽,然后读取园区的布局信息,其中0表示可以参观,1表示不能参......
  • 华为OD刷题C卷 - 每日刷题30(小明找位置,分隔均衡字符串)
    1、(小明找位置):这段代码是解决“小明找位置”的问题。它提供了一个Java类Main,其中包含main方法和getResult方法,用于帮助小明快速找到他在排队中应该站的位置。main方法首先读取已排列好的小朋友的学号数组和小明的学号,然后调用getResult方法并打印小明应该站的位置。getRe......
  • Android Media Framework(五)Tunnel Mode
    本篇将聚焦AndroidTunnelMode,详细解析组件之间隧道连接过程、数据传递过程、组件销毁过程。通过阅读本篇内容,我们应能对tunneled组件的连接过程和buffer分配过程有所了解。1、TunnelMode介绍ILSpec详细描述了TunnelComponent的实现方式,但内容较为晦涩难懂,网上相关......
  • 华为余承东:全场景代码智能生成工具CodeArts snap正式发布,码力遥遥领先
    野心让人勤奋节制让人枯萎   前几天的端午节,华为发布了新一代代码智能生成工具codeartssnap。可以一键生成高效代码,精准解决技术难题,让你像技术大牛一样轻松完成业务开发。  下面来看看它是如何码力全开的。 第一个,通过注释一键生成代码如下,当你写好代码的注......
  • 【LeetCode最详尽解答】11-盛最多水的容器 Container-With-Most-Water
    欢迎收藏Star我的MachineLearningBlog:https://github.com/purepisces/Wenqing-Machine_Learning_Blog。如果收藏star,有问题可以随时与我交流,谢谢大家!链接:11-盛最多水的容器直觉这个问题可以通过可视化图表来理解和解决。通过图形化这个问题,可以简化解决过程。......
  • 【LeetCode最详尽解答】15-三数之和 3sum
    欢迎收藏Star我的MachineLearningBlog:https://github.com/purepisces/Wenqing-Machine_Learning_Blog。如果收藏star,有问题可以随时与我交流,谢谢大家!链接:15-三数之和直觉示例:输入:nums=[-1,0,1,2,-1,-4]输出:[[-1,-1,2],[-1,0,1]]解释:nums[......
  • 【TensorFlow深度学习】使用Horovod加速TensorFlow分布式训练
    使用Horovod加速TensorFlow分布式训练使用Horovod加速TensorFlow分布式训练:并行计算的高效实践Horovod简介安装与环境准备示例代码结构性能优化建议结语使用Horovod加速TensorFlow分布式训练:并行计算的高效实践在深度学习领域,随着模型复杂度的日益增加,单机训练已......