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

获取最长字母顺序子串时丢失字符串末尾字符问题排查

解决最长字母顺序子串丢失最后一个字符的问题

嘿,我一眼就揪出问题所在啦——你的代码完全没处理字符串的最后一个字符,而且递增逻辑里的字符添加时机也有小疏漏,咱们一步步拆解修复:

问题根源分析

看你代码里的核心判断:

if(i+1 < len(s)):
    if(s[i] <= s[i+1]):
        currentSubstring = currentSubstring + s[i]
        # ... 其他逻辑

当i是字符串最后一个索引时(比如输入"abcde"里的i=4,对应字符"e"),i+1 < len(s)直接不成立,这个分支被跳过,导致"e"从来没被加到currentSubstring里,自然出不了最终结果。

另外还有个小问题:就算在递增分支里,你只把当前字符s[i]加进去,下一个符合条件的字符要等下一次循环处理,可最后一次循环根本没机会执行这个逻辑。

修正后的代码

我调整了逻辑顺序,先把当前字符纳入子串,再判断是否需要截断,最后循环结束后补一次收尾检查:

s = input('Type in your string: ')
current_substring = ''
max_substring = ''

for i, c in enumerate(s):
    # 先把当前字符加入当前子串,保证不会漏掉任何字符
    current_substring += c
    
    # 如果不是最后一个字符,且下一个字符不满足递增,就触发比较和重置
    if i + 1 < len(s) and s[i] > s[i+1]:
        if len(current_substring) > len(max_substring):
            max_substring = current_substring
        current_substring = ''

# 循环结束后必须再检查!最后一段递增子串还没和最长子串做比较
if len(current_substring) > len(max_substring):
    max_substring = current_substring

print(max_substring)

修正点说明

  • 先加当前字符:不管是不是最后一个字符,先把它加入current_substring,从根源避免丢字符
  • 调整截断时机:只有当下一个字符不满足递增时,才更新最长子串并重置当前子串
  • 循环后收尾检查:比如输入全递增的字符串时,循环里不会触发截断逻辑,这时候必须补一次比较

测试你的例子:输入abcde,现在输出就是abcde了;再试输入abczabc,输出会是abcz,完全符合预期~

内容的提问来源于stack exchange,提问作者P.H.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:35:16