为什么Python中使用自定义变量替代len函数做长度判断输出结果不同?
两种判断逻辑输出不一致的原因
核心差异来自两个变量的更新时机:
len(longest_temp)和len(longest)是实时计算的长度,每次调用都会取变量最新的实际长度longest_length和longest_check仅在每轮for循环的开头赋值一次,后续你在循环内修改longest_temp、longest的值时,这两个变量不会自动同步更新,一直保留本轮循环开头的旧值
典型出错场景:最长子串在字符串末尾
你的测试用例中最长递增子串是末尾的ouvz,处理最后一个字符z时流程如下:
- 本轮循环开头,
longest_temp是还没加z的ouv,长度为3,因此longest_length = 3-1 = 2;此时全局最长longest是amt,长度为3,longest_check = 3-1 = 2 - 判定
z符合递增规则,给longest_temp拼接z,此时longest_temp变成ouvz,实际长度为4,但longest_length还是旧值2 - 所有字符遍历完成后,需要做最终校验:
- 用
len(longest_temp) > len(longest)判断:4>3成立,正确把longest更新为ouvz - 用
longest_length > longest_check判断:2>2不成立,不会更新longest,最终输出错误的amt
- 用
如果希望用预存长度的方式优化性能,必须在每次修改longest_temp、longest后,同步更新对应的长度变量,不能只在循环开头赋值一次。
内容的提问来源于stack exchange,提问作者Bubbz
相关产品推荐
相关产品推荐

