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

求评改:统计字符串中连续BA/CA字符对最大数量的Python函数

优化方案:统计连续BA/CA字符对的最大数量

你原函数存在一个关键bug:当遍历到i=0时,访问s[i-1]会触发Python的负索引特性,取到字符串最后一个字符,这会导致错误的匹配逻辑(比如输入"A"时会出现无意义的判断)。另外从后往前遍历的逻辑可读性偏弱,换成从前往后遍历会更直观。

下面是优化后的函数,解决了索引问题,同时让逻辑更清晰:

def f(s: str) -> int:
    max_count = 0
    current = 0
    i = 0
    n = len(s)
    
    while i < n - 1:
        # 检查当前位置与下一个位置是否构成BA或CA
        if (s[i] == 'B' and s[i+1] == 'A') or (s[i] == 'C' and s[i+1] == 'A'):
            current += 1
            i += 2  # 跳过下一个字符,避免重叠匹配
        else:
            # 更新最大计数并重置当前计数
            if current > max_count:
                max_count = current
            current = 0
            i += 1
    # 循环结束后,检查最后一段未触发重置的连续计数
    if current > max_count:
        max_count = current
    
    return max_count

改进点说明:

  • 彻底避免索引越界:遍历终止条件设为i < n - 1,确保每次都能安全访问s[i]和s[i+1],不会出现负索引或超出字符串长度的情况。
  • 逻辑更直观:从字符串开头向后遍历,符合常规阅读习惯,匹配到目标字符对后直接跳过下一个字符,保证不重叠计数。
  • 边界处理更完善:空字符串或长度小于2的字符串会直接返回0,无需额外判断。
  • 无遗漏的计数更新:循环结束后补充检查最后一段连续计数,避免遗漏未触发重置逻辑的末尾匹配。

测试你的示例用例,结果均符合预期:

print(f("BABABA125"))  # -> 3
print(f("234CA4BACA"))  # -> 2
print(f("BABACABACA56"))  # -> 5
print(f("1BABA24CA"))  # -> 2

内容的提问来源于stack exchange,提问作者Ionnafan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 06:20:27