面试题字母递增实现优化咨询:A→B、Z→AA等逻辑
更简洁的字母递增实现方案
这个字母递增规则本质是无零的26进制数递增:每个字母对应1-26(A/a=1,Z/z=26),递增后再转回字母串,同时保留原字符串的大小写格式。你的现有代码存在逻辑错误(比如条件判断random_string[0] == 'z' or 'Z'永远为真)、分支冗余、边界处理混乱等问题,下面是更简洁可靠的实现思路和代码:
核心思路
把字符串当作特殊的26进制数(没有0,最低是1),从后往前处理进位:
- 从最后一个字符开始加1,若加1后超过26(即原字符是Z/z),则当前位重置为1(A/a),并向前进位1
- 若处理完所有字符后仍有进位,说明原字符串全是Z/z,在开头补一个对应大小写的A/a
- 全程保留每个字符的大小写状态
优化后的代码
def increment_string(s): chars = list(s) carry = 1 # 从后往前遍历每个字符处理进位 for i in range(len(chars)-1, -1, -1): char = chars[i] is_upper = char.isupper() # 把字母转成1-26的数值 num = ord(char.upper()) - ord('A') + 1 num += carry if num > 26: num = 1 carry = 1 else: carry = 0 # 把数值转回对应大小写的字母 new_char = chr(num + ord('A') - 1) chars[i] = new_char if is_upper else new_char.lower() # 没有进位就提前结束遍历,提升效率 if carry == 0: break # 所有字符都进位了,在开头加一个A/a if carry == 1: first_case = chars[0].isupper() if chars else True chars.insert(0, 'A' if first_case else 'a') return ''.join(chars) # 测试用例验证 print(increment_string("A")) # 输出 B print(increment_string("Z")) # 输出 AA print(increment_string("ABZ")) # 输出 ACA print(increment_string("ZbgsGD")) # 输出 ACHSGE
代码优势
- 逻辑简洁:用进位思想替代大量条件判断,可读性和可维护性更强
- 边界全覆盖:自动处理单个Z、末尾Z、中间Z、全Z等所有情况
- 大小写保留:严格遵循原字符串的大小写格式
- 效率更高:无进位时提前终止遍历,减少不必要的计算
内容的提问来源于stack exchange,提问作者J_B
相关产品推荐
相关产品推荐

