You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

面试题字母递增实现优化咨询: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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 06:50:16