You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

技术问询:实现大写字母与数字字符串的重排功能

解决字符串重排:字母排序在前,数字之和在后

我来帮你搞定这个字符串重排的需求!先明确下核心要求:输入一个由大写英文字母和0-9数字组成的字符串,返回一个新字符串——所有大写字母按升序排列在前,后面拼接上所有数字的总和(转为字符串)。

原代码的小问题

你的思路方向是对的,但有几个可以优化和修正的细节:

  • re.search判断单个字符是否为大写字母有点绕,直接用Python字符串的isupper()方法更高效简洁
  • 最后一行的return resul是拼写错误,应该是return result
  • 如果输入全是字母,数字总和为0时,原代码会在末尾追加"0",如果需求是这种情况不需要显示数字部分,得额外加个判断逻辑

修正后的完整代码

class Solution:
    def rearrange(self, input_str):
        # 处理空字符串的情况
        if not input_str:
            return input_str
            
        sum_digits = 0
        letters = []
        
        for char in input_str:
            # 判断是否为大写字母
            if char.isupper():
                letters.append(char)
            else:
                # 转为整数累加求和
                sum_digits += int(char)
        
        # 对字母列表进行升序排序
        sorted_letters = sorted(letters)
        # 把排序后的字母拼接成字符串
        letter_str = ''.join(sorted_letters)
        
        # 处理数字和为0的情况:如果没有数字输入,就不拼接"0"
        if sum_digits == 0:
            return letter_str
        else:
            return letter_str + str(sum_digits)

代码逻辑拆解

  • 空字符串处理:先判断输入是否为空,直接返回空字符串,避免后续无效操作
  • 字符分类遍历:逐个遍历输入字符串的字符,大写字母存入列表,数字转为整数累加求和
  • 字母排序拼接:用sorted()对字母列表做升序排序,再用join()把列表转为完整字符串
  • 数字和拼接判断:如果数字总和为0(说明输入里没有数字),只返回排序后的字母;否则把数字和转为字符串拼在后面

测试示例验证

举几个实际例子看看效果:

  • 输入:"AC2B3D" → 排序后的字母是"ABCD",数字和是2+3=5,返回"ABCD5"
  • 输入:"XYZ" → 没有数字,直接返回"XYZ"(不会额外加"0")
  • 输入:"1234" → 没有字母,返回数字和的字符串"10"(1+2+3+4=10)

内容的提问来源于stack exchange,提问作者C. Wei

火山引擎 最新活动