技术问询:实现大写字母与数字字符串的重排功能
解决字符串重排:字母排序在前,数字之和在后
我来帮你搞定这个字符串重排的需求!先明确下核心要求:输入一个由大写英文字母和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




