求最长字母序字符串代码报错:IndexError索引越界问题排查求助
排查你的最长字母序字符串代码错误
咱们来一步步解决这个问题哈!
首先说说你遇到的索引越界错误
你代码里的for i in range(0,len(s)+1):是问题根源。字符串的索引是从0开始到len(s)-1结束的,当循环走到i = len(s)的时候,s[i+1]就相当于访问s[len(s)+1],这肯定超出了字符串的范围,所以会抛出IndexError: string index out of range。
再说说代码逻辑里的其他小问题
除了索引越界,你的代码还有个逻辑漏洞:只有当s[i] < s[i+1]时才更新strtemp,但如果遇到不满足的情况(比如s[i] >= s[i+1]),你没有重置strtemp,这会导致后续的新递增序列没法被正确记录。比如输入"abczabc",当走到z之后,a比z小,这时候应该重新开始记录a开头的序列,而不是继续在z后面拼接。
修正后的完整代码
strr = '' s = input('please enter your string: ') # 先处理空字符串的情况,避免后续s[0]报错 if not s: print('longest string is ' + strr) exit() strtemp = s[0] # 循环到倒数第二个字符就够了,因为要访问i+1 for i in range(len(s)-1): if s[i] < s[i+1]: strtemp += s[i+1] else: # 不满足递增条件时,重置strtemp为当前的下一个字符,开始新序列 strtemp = s[i+1] # 每次循环都检查是否需要更新最长字符串 if len(strtemp) > len(strr): strr = strtemp print('longest string is ' + strr)
修正点说明
- 把循环范围改成
range(len(s)-1),这样i的最大值是len(s)-2,i+1刚好是字符串的最后一个索引,不会越界 - 增加了空字符串的处理,防止用户输入空内容时出错
- 新增了不满足递增条件时的
strtemp重置逻辑,确保能正确记录每一段递增序列 - 把长度检查移到循环的每一步,避免漏掉末尾的最长序列
内容的提问来源于stack exchange,提问作者YMAR
相关产品推荐
相关产品推荐

