华为OD机试-字符串分割

news/2024/7/20 16:15:44 标签: 华为od, 算法, python, 华为机试

题目描述

给定一个非空字符串S,其被N个‘-’分隔成N+1的子串,给定正整数K,要求除第一个子串外,其余的子串每K个字符组成新的子串,并用‘-’分隔。对于新组成的每一个子串,如果它含有的小写字母比大写字母多,则将这个子串的所有大写字母转换为小写字母;反之,如果它含有的大写字母比小写字母多,则将这个子串的所有小写字母转换为大写字母;大小写字母的数量相等时,不做转换。
输入描述:
输入为两行,第一行为参数K,第二行为字符串S。
输出描述:
输出转换后的字符串。
示例1
输入
3
12abc-abCABc-4aB@
输出
12abc-abc-ABC-4aB-@
说明
子串为12abc、abCABc、4aB@,第一个子串保留,后面的子串每3个字符一组为abC、ABc、4aB、@,abC中小写字母较多,转换为abc,ABc中大写字母较多,转换为ABC,4aB中大小写字母都为1个,不做转换,@中没有字母,连起来即12abc-abc-ABC-4aB-@
示例2
输入
12
12abc-abCABc-4aB@
输出
12abc-abCABc4aB@
说明
子串为12abc、abCABc、4aB@,第一个子串保留,后面的子串每12个字符一组为abCABc4aB@,这个子串中大小写字母都为4个,不做转换,连起来即12abc-abCABc4aB@

代码实现

python"># coding:utf-8
class Solution:
    def stringSplit(self, k, s):
        begin = 0
        end = 0
        # 遍历字符串,遇到第一个分隔符的时候跳出,将第一个子串存下来,不需要做大小写转换
        for i in s:
            if i == '-':
                break
            else:
                end += 1
        res = s[begin:end]
        begin = end + 1

        # 从第二个子串开始判断
        while begin < len(s):
            tmp = ''
            lower = 0
            linefix = 0
            # 每K个字符串作为一个新的子串长度
            for i in range(k):
                while begin + i + linefix <= len(s) - 1 and s[begin + i + linefix] == '-':  # 遇到分隔符,直接跳过不处理,分隔符计数器+1
                    linefix += 1
                if begin + i + linefix > len(s) - 1:  # 超出原字符串长度,跳出
                    break
                if s[begin + i + linefix].islower():  # 当前字符为小写,则小写计数器加1
                    lower += 1
                elif s[begin + i + linefix].isupper():  # 当前字符为大写,则小写计数器减1
                    lower -= 1
                tmp = tmp + s[begin + i + linefix]

            # 小写字符多则全部转小写,反之,转大写
            if lower > 0:
                res = res + '-' + tmp.lower()
            if lower < 0:
                res = res + '-' + tmp.upper()
            if lower == 0:
                res = res + '-' + tmp
            begin = begin + k + linefix
        return res


if __name__ == '__main__':
    k = input("K:")
    s = input("s:")
    solution = Solution()
    print(solution.stringSplit(int(k), s))


http://www.niftyadmin.cn/n/4941488.html

相关文章

Image Super-Resolution Using Deep Convolutional Networks-SRCNN

Some words&#xff1a; 这里是一些阅读文章的笔记&#xff0c;这篇文章是第一篇将深度学习应用于超分领域的文章&#xff0c;具有较为重要的意义。 &#xff08;一&#xff09;Abstract&#xff1a; 我们提出一个对于单图像超分的深度学习方法&#xff0c;端到端地学习高低分…

手写线程池的过程与思考

线程池的抽象接口 public interface SelfThreadPool {// 提交任务到线程池void execute(Runnable runnable);//关闭void shutdown();//获取线程池初始化的大小int getInitSize();//获取线程池最大的大小int getMaxSize();// 获取线程池核心线程数量,int getCoreSize();// 获取…

Hugging News #0814: Llama 2 学习资源大汇总

每一周&#xff0c;我们的同事都会向社区的成员们发布一些关于 Hugging Face 相关的更新&#xff0c;包括我们的产品和平台更新、社区活动、学习资源和内容更新、开源库和模型更新等&#xff0c;我们将其称之为「Hugging News」。本期 Hugging News 有哪些有趣的消息&#xff0…

rust踩雷笔记(1)——切片传参和解引用赋值

最近学习rust&#xff0c;网上资料还是很有限&#xff0c;做题遇到的问题&#xff0c;有时需要自己试验。把自己做题过程遇到的问题&#xff0c;和试验的结论&#xff0c;做一些简单记录。 阅读下列文字和代码 用切片&#xff08;的引用&#xff09;做参数要非常小心&#xff…

echart 3d立体颜色渐变柱状图

如果可以实现记得点赞分享&#xff0c;谢谢老铁&#xff5e; 1.需求描述 根据业务需求将不同的法律法规&#xff0c;展示不同的3d立体渐变柱状图。 2.先看下效果图 3. 确定三面的颜色&#xff0c;这里我是自定义的颜色 // 右面生成颜色const rightColorArr ref(["#79D…

CSS3:图片边框

简介 图片也可以作为边框&#xff0c;以下是实例演示 注意 实现该效果必须添加border样式&#xff0c;且必须位于border-image-socure之前否则不会生效 实例 <html lang"en"><head><style>p {width: 600px;margin: 200px auto;border: 30px soli…

STM32F407使用Helix库软解MP3并通过DAC输出,最精简的STM32+SD卡实现MP3播放器

只用STM32单片机SD卡耳机插座&#xff0c;实现播放MP3播放器&#xff01; 看过很多STM32软解MP3的方案&#xff0c;即不通过类似VS1053之类的解码器芯片&#xff0c;直接用STM32和软件库解码MP3文件&#xff0c;通常使用了labmad或者Helix解码库实现&#xff0c;Helix相对labm…

prometheusalert区分告警到不同钉钉群

方法一 修改告警规则 - alert: cpu使用率大于88%expr: instance:node_cpu_utilization:ratio * 100 > 88for: 5mlabels:severity: criticallevel: 3kind: CpuUsageannotations:summary: "cpu使用率大于85%"description: "主机 {{ $labels.hostname }} 的cp…