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%内容,订阅专栏后可继续查看/也可单篇购买

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

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

全部评论

相关推荐

04-12 21:52
南开大学 Java
鼠鼠有点摆,去年边学着没敢投简历,没实习。从1月到现在总共面了五次,四次字节的日常(HR打电话约面试才敢去的),然后一次腾讯的暑期,都是一面挂,其他则是没给面。暑期的岗,4.2才开始海投,前面想着等字节第四次一面后再投,结果挂,而且感觉投晚了。字节投了11个,9个简历挂,剩下2个没动静。阿里全都简历挂,剩下的在&quot;投递简历&quot;。腾讯给了一次面。然后其他大中厂、手机厂什么的都是做完测评or笔试就没下文,打开几个看也是终止流程,感觉剩下的也应该是简历挂了。感觉是简历的原因?项目部分,几次面试,感觉面试官主要就拷问过秒杀这一个点。自己说的时候会尝试把sse那条说成亮点,但除了腾讯面试官问过一下这整个点在业务方面对用户有什么用之类的问题外,其他最多只是问一下sse八股...感觉也许不是很让面试官感兴趣。这个短链接也是无人问津,就被问过一回雪花算法的设计。也许我该拿点评改改,然后再在网上找一个什么项目,凑两个,而不是用自己现在这两个项目?或者是点评改改放前面,然后原本第一个项目,把秒杀抽掉,剩下的想办法从网上火的RAG项目里移植点亮点,或者直接就用网上的RAG项目?感觉我主要还是偏向后端开发,但是感觉如果除开点评,再拿一个项目,想不到有什么自己能掌控且跟点评不重的。然后鼠鼠之前主要的问题是担心面试让打开项目演示,然后就一直花时间在用AI整第一个项目,第二个项目都没时间整,第四次面试之前还因为太害怕被认为不熟悉项目,跟AI一起把简历的说辞做了大幅度弱化,然后暑期都是拿弱化后的简历投的,感觉是不是看上去太没有吸引力就直接给简历挂了。(图1是弱化后的,图2是弱化前的,但之前3月初投了几家好像也是简历挂。)而且因为3月花了很多时间整在跟AI整代码,导致八股和算法都没怎么看,算法之前有跟灵神题单刷一些,还算入门,但是八股只看了一些基本的,可能面试的时候只答得上来60-70%,而且表述有些混乱,都是想到哪说到哪;前面几回面试基本上都有大板块的基础八股没答出来,比如RedisZ&nbsp;Set数据结构,MQ延时消息、可靠性保证,JVM内存分配的过程、GC&nbsp;roots,JUC锁,设计模式。现在有点不知道该怎么办。求大佬们给点简历修改建议或者面试准备建议,不胜感激!
何时能不做牛马:简历每个点之间的间距可以缩一下。几乎没遇到过要演示项目的情况,即使万一遇上了你也可以说部署在其他电脑上本地没代码。nku不应该简历挂吧?抓紧背背八股练练表达,不要放弃,五六月份找到也不晚(不然还得提前入职
应届生简历当中,HR最关...
点赞 评论 收藏
分享
想踩缝纫机的小师弟练...:不理解你们这些人,要放记录就把对方公司名字放出来啊。不然怎么网暴他们
点赞 评论 收藏
分享
评论
2
2
分享

创作者周榜

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