华为OD-2024年E卷-字符串分割[100分] -- python

问题描述:

给定一个非空字符串S,其被N个'-分隔成 N+1的子串,给定正整数K,要求除第一个子串外,其余的子串每K个字符组成新的子串,并用-分隔。对于新组成的每一个子串,如果它含有的小写字母比大写字母多,则将这个子串的所有大写字母转换为小写字母;反之,如果它含有的大写字母比小写字母多,则将这个子串的所有小写字母转换为大写字母;大小写字母的数量相等时,不做转换。

输入描述

输入为两行,第一行为参数K,第二行为字符串 S。

输出描述

输出转换后的字符串。

复制代码
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-@

12
12abc-abCABc-4aB@

12abc-abCABc4aB@
说明子串为12abc、abCABc、4aB@,第一个子串保留,后面的子串每12个字符一组为abCABc4aB@,这个子串中大小写字母都为4个,不做转换,连起来即12abc- abCABc4aB@

解题思路:

按照规则处理字符串,除第一个子串外,将剩余的子串加入一个大字符串,然后划分大字符串

  1. 每k个字符组成一个新子串,用 '-' 分隔
  2. 每个新子串,大写字母多于小写字母,转换为大写字母
  3. 每个新子串,大写字母少于小写字母,转换为小写字母

代码实现:

python 复制代码
k = int(input())
s = input().split('-')
c_s = ''
for i in range(1,len(s)):
    c_s += s[i]#将剩余子串加入大字符串
del s[1:len(s)]
n = int(len(c_s))
left,right = 0,0
#划分大字符串
while n > right :
    a,b = 0,0
    right = min(left+k,n)
    temp = c_s[left:right]
    #大小写转换
    for j in range(len(temp)):
        if 'a' <= temp[j] <= 'z':
            a += 1
        elif 'A' <= temp[j] <= 'Z':
            b += 1
    if a > b:
        temp = temp.lower()
    elif a < b:
        temp = temp.upper()
    s.append(temp)
    left += k
print('-'.join(s))
相关推荐
汀、人工智能3 分钟前
[特殊字符] 第57课:搜索旋转排序数组
数据结构·算法·数据库架构·图论·bfs·搜索旋转排序数组
倦王8 分钟前
力扣日刷47
算法·leetcode·职场和发展
MicroTech202510 分钟前
突破量子数据加载瓶颈,MLGO微算法科技推出面向大规模量子计算的分治态制备技术
科技·算法·量子计算
码王吴彦祖12 分钟前
顶象 AC 纯算法迁移实战:从补环境到纯算的完整拆解
java·前端·算法
SccTsAxR16 分钟前
算法基石:手撕离散化、递归与分治
c++·经验分享·笔记·算法
wuweijianlove18 分钟前
算法测试中的数据规模与时间复杂度匹配的技术4
算法
Q741_14742 分钟前
每日一题 力扣 3655. 区间乘法查询后的异或 II 模拟 分治 乘法差分法 快速幂 C++ 题解
c++·算法·leetcode·模拟·快速幂·分治·差分法
The_Ticker43 分钟前
印度股票实时行情API(低成本方案)
python·websocket·算法·金融·区块链
夏乌_Wx1 小时前
剑指offer | 2.4数据结构相关题目
数据结构·c++·算法·剑指offer·c/c++
AI成长日志2 小时前
【笔面试算法学习专栏】哈希表基础:两数之和与字母异位词分组
学习·算法·面试