Python提取大小写敏感的最长递减子串丢失末尾子串如何修复
问题修复方案
问题根因
代码遍历完整个字符串后,没有将最后一段正在累加的非递增子串追加到结果列表中,因此所有输入的末尾子串都会丢失。
最小改动修复版本
只需要在循环结束后新增一行将剩余子串加入列表的逻辑即可:
s1 = 'bbaasssrppoccbaaacbaba' # s1 = 'hjgAvjhjKLhbfvbZSF' decSub = '' listSub = [] i= 0 while i < len(s1): current = s1[i] previous = s1[i] if i == 0 else s1[i-1] if ord(current) <= ord(previous): decSub += current else: listSub.append(decSub) decSub = '' decSub += current i +=1 # 新增:将最后一段累加的子串加入列表 listSub.append(decSub) print(listSub)
更简洁的实现版本
可以用for循环简化遍历逻辑,直接通过字符ASCII码比较天然支持大小写敏感判断,效果完全符合要求:
def get_max_non_increasing_substrings(s): if not s: return [] res = [] current_sub = s[0] for c in s[1:]: if ord(c) <= ord(current_sub[-1]): current_sub += c else: res.append(current_sub) current_sub = c res.append(current_sub) return res # 测试验证 print(get_max_non_increasing_substrings('bbaasssrppoccbaaacbaba')) # 输出:['bbaa', 'sssrppoccbaaa', 'cba', 'ba'] print(get_max_non_increasing_substrings('hjgAvjhjKLhbfvbZSF')) # 输出:['h', 'jgA', 'vjh', 'jK', 'L', 'hb', 'f', 'vbZSF']
内容的提问来源于stack exchange,提问作者Shivam Yadav
相关产品推荐
相关产品推荐

