E卷-(100分)字符串分割转换

字符串分割转换

问题描述

给定一个非空字符串 ,它被 个 '-' 分隔成 个子串。现在给定一个正整数 ,要求对 进行如下处理:

  1. 保留第一个子串不变。
  2. 对于剩余的子串,每 个字符组成一个新的子串,用 '-' 分隔。
  3. 对于每个新组成的子串,进行以下转换:
    • 如果小写字母数量多于大写字母,将所有大写字母转换为小写字母。
    • 如果大写字母数量多于小写字母,将所有小写字母转换为大写字母。
    • 如果大小写字母数量相等,不进行转换。

请输出处理后的字符串。

输入格式

输入包含两行: 第一行为一个正整数 。 第二行为字符串

输出格式

输出一行,为处理后的字符串。

样例输入

3
12abc-abCABc-4aB@

样例输出

12abc-abc-ABC-4aB-@

样例解释

原始子串为 "12abc"、"abCABc"、"4aB@"。第一个子串 "12abc" 保留不变。剩余部分每 3 个字符一组,得到 "abC"、"ABc"、"4aB"、"@"。

  • "abC" 中小写字母较多,转换为 "abc"。
  • "ABc" 中大写字母较多,转换为 "ABC"。
  • "4aB" 中大小写字母数量相等,保持不变。
  • "@" 中没有字母,保持不变。

最后用 '-' 连接所有部分,得到 "12abc-abc-ABC-4aB-@"。

样例输入

12
12abc-abCABc-4aB@

样例输出

12abc-abCABc4aB@

样例解释

原始子串为 "12abc"、"abCABc"、"4aB@"。第一个子串 "12abc" 保留不变。剩余部分作为一个整体 "abCABc4aB@",其中大小写字母数量相等,因此不做转换。最后用 '-' 连接,得到 "12abc-abCABc4aB@"。

数据范围

  • ,其中 表示字符串 的长度。
  • 中只包含大小写英文字母、数字和 '-'。

题解

这道题目的核心在于字符串的处理和转换。

解题思路如下:

  1. 首先,将输入的字符串 按 '-' 分割成子串数组。
  2. 保留第一个子串,将剩余子串合并成一个字符串。
  3. 对合并后的字符串每 个字符进行分组。
  4. 对每个分组进行大小写字母数量统计和转换。
  5. 最后,将处理后的所有部分用 '-' 连接起来。

参考代码

  • Python
def process_string(k, s):
    # 将字符串按'-'分割成子串
    parts = s.split('-')
    
    # 保留第一个子串作为结果的开始
    result = [parts[0]]
    
    # 合并剩余的所有子串
    remaining = ''.join(parts[1:])
    
    # 处理剩余部分
    for i in range(0, len(remaining), k):
        # 每k个字符取一个chunk
        chunk = remaining[i:i+k]
        
        # 统计小写字母数量
        lower_count = sum(1 for c in chunk if c.islower())
        # 统计大写字母数量
        upper_count = sum(1 for c in chunk if c.isupper())
        
        # 根据大小写字母数量进行转换
        if lower_count > upper_count:
            # 小写字母多,全部转换为小写
            result.append(chunk.lower())
        elif upper_count > lower_count:
            # 大写字母多,全部转换为大写
            result.append(chunk.upper())
        else:
            # 大小写字母数量相等,保持原样
            result.append(chunk)
    
    # 用'-'连接处理后的所有部分,并返回结果
    return '-'.join(result)

# 读取输入
k = int(input())  # 读取整数k
s = input()  # 读取字符串s

# 调用函数处理字符串并输出结果
print(process_string(k, s))
  • C
#include <stdio.h>
#include <string.h>
#include <ctype.h>

void process_string(int k, const char *s, char *result) {
    int result_index = 0;
    char remaining[100001] = "";  // 剩余部分
    int part_index = 0;          // 记录处理的子串索引

    // 遍历字符串,找到第一个'-'之前的部分
    while (s[part_index] != '-' && s[part_index] != '\0') {
        result[result_index++] = s[part_index++];
    }

    // 跳过'-'并保留后续部分
    while (s[part_index] != '\0') {
        if (s[part_index] != '-') {
            strncat(remaining, &s[part_index], 1);
        }
        part_index++;
    }

    // 处理剩余部分
    int remaining_len = strlen(remaining);
    for (int i = 0; i < remaining_len; i += k) {
        result[result_index++] = '-';  // 每个分块前添加'-'

        // 获取k长度的子串(chunk)
        char chunk[101];  // chunk最大长度为100
        int chunk_len = (i + k < remaining_len) ? k : (remaining_len - i);
        strncpy(chunk, &remaining[i], chunk_len);
        chunk[chunk_len] = '\0';  // 确保子串是合法的C字符串

        int lower_count = 0, upper_count = 0;

        // 统计大小写字母数量
        for (int j = 0; j < chunk_len; j++) {
            if (islower(chunk[j])) lower_count++;
            if (isupper(chunk[j])) upper_count++;
        }

        // 根据数量决定大小写转换
        if (lower_count > upper_count) {
            for (int j = 0; j < chunk_len; j++) {
                chunk[j] = tolower(chunk[j]);
            }
        } else if (upper_count > lower_count) {
            for (int

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

算法刷题笔记 文章被收录于专栏

本专栏收集并整理了一些刷题笔记

全部评论

相关推荐

10-21 23:08
已编辑
四川大学 C++
yt马上要签三方了,差不多就到此为止了-----------------------------------------------------------------------------------------------------------------------------bg和秋招记录可以看上一篇文章。刚才收到了字节客户端的offer,头脑一片混乱,写一篇秋招的总结,也想让xdm参谋一下。截止9.28下午,共投递了38份简历(一家公司两个部门的,比如网易互娱和网易雷火算两家),基本上就照着游鲨文档投的,能投的都投的差不多了,只有休闲类的基本上没投,之后应该也不会继续投了。另外收到了字节客户端的面邀,本来就是随便面面的,结果自己也没想到能拿offer。写完上一段后再次认识到,游戏行业真的是一条容错率很低的路。上面38家,只有8家进面,其中只有游卡是主要使用unity的,并且也有ue在研项目,剩下主要使用unity的公司没有一家进面。也许有笔试的原因,但我自认为笔试的发挥都是大差不差的。都说引擎不重要,底层都是互通的,但是在人才饱和的情况下,有大把会用unity的,为什么要你一个没摸过unity的?经过将近20场面试,感觉和看前几年前辈们分享的经历还是有比较大的不同的。在我自我介绍时会说c++是强项,ue引擎还在学习中的情况下,面试内容基本上都会涉及ue引擎模块的底层原理和应用,八股的占比没有前几年那么多,感觉这是游戏开发近几年来的趋势了,要往深度挖掘,只有基础好不管用了。也有可能我只是个例?毕竟还有非此方向的也会接到面试。在allin游戏,只面了不到20场的情况下,很幸运能拿到两个offer,至少不用担心毕业家里蹲了,而且两个offer都是在上海。其中一份就是字节社交&amp;通讯部门的客户端,选择这条路的话,应该就和游戏行业说再见了吧,每天只需要想着工作,虽然字节的工作强度很高,但是钱是不会差的,就是看到网上都在劝退客户端,而且不知道客户端的未来前景怎么样。反正目前应该是很缺人,我看到大把别的方向被字节客户端捞的。另一个offer是youta,主要做出海换皮slg的,但是我的岗位是ue5方向。给的不多,但是好歹是在游戏行业,了解到ue5这个项目组也不错,去两三年应该能学到不少技术,至少能在游戏行业站稳脚跟吧,之后会怎么样也不知道,听说这家倾向于用校招生,都呆不久。现在就是很纠结。剩下还在流程中的,雷火三面不是很理想,而且手撕只有思路,没做出来,应该没戏了;库洛一面后暂时没动静,官网因为神秘原因也看不到流程;游卡二面后说是有hrbp,但是也没消息了;昨天做了乐牛和英雄互娱潘神的笔试,都不错,但是乐牛应该是不会去的,英雄互娱看到有很多毁offer的情况,应该也不会考虑。最终大概就是这两个offer里选了。各位游戏人,客户端人,你们觉得呢?
Stargazer6...:最好继续捡漏吧 至少要等十月底海王们释放的面完
投递字节跳动等公司10个岗位
点赞 评论 收藏
分享
评论
2
2
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务