能否无需定义函数实现Python最长字母序子串输出?
实现无自定义函数、无列表的最长字母序子串查找
当然可以!咱们完全不用自定义函数或者列表,只靠基础的循环和变量跟踪就能搞定这个需求。核心思路就是实时跟踪当前的字母序子串,同时记录下见过的最长子串,遇到不符合顺序的字符时就重置当前子串并更新最长记录。
具体实现代码
the_string = "abcdefgghhisdghlqjwnmonty" # 先处理空字符串的特殊情况 if not the_string: print("") else: # 初始化当前子串和最长子串为第一个字符 current_substring = the_string[0] longest_substring = the_string[0] # 从第二个字符开始遍历整个字符串 for i in range(1, len(the_string)): current_char = the_string[i] # 如果当前字符大于等于当前子串的最后一个字符,就追加进去 if current_char >= current_substring[-1]: current_substring += current_char else: # 遇到不满足顺序的字符,先检查当前子串是不是更长 if len(current_substring) > len(longest_substring): longest_substring = current_substring # 重置当前子串为当前字符,重新开始跟踪 current_substring = current_char # 循环结束后别忘了最后检查一次——最后一段子串可能是最长的 if len(current_substring) > len(longest_substring): longest_substring = current_substring print(longest_substring)
代码说明
- 咱们把你之前写的
in_alphabetical_order函数里的逻辑,直接拆解到了主流程的循环中:每次只需要比较当前字符和当前子串的最后一个字符,就能判断是否符合字母顺序,不用单独写函数。 - 全程只用了字符串变量和循环,完全没用到列表——字符串的拼接操作
+=就足够跟踪当前子串了。 - 最后额外的检查很重要:如果原字符串的最后一段是符合字母顺序的最长子串,循环里不会触发更新,所以必须在循环结束后再确认一次。
运行这段代码,就能得到你示例里的结果:abcdefgghhis。
内容的提问来源于stack exchange,提问作者user9571453
相关产品推荐
相关产品推荐

