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

Python字符串首尾极值程序优化:如何将耗时降至1000ms以内?

优化方案:从末尾比较字符串的高效实现

核心优化思路

原代码的主要性能瓶颈在于存储所有输入字符串并二次遍历反转,当输入量较大时会产生显著的内存与时间开销。优化方向聚焦在「边读边处理,不缓存全量数据」和「降低IO调用次数」。

优化后的代码(边读边维护最值)

import sys

# 处理停止字符串,保持与后续strip逻辑一致
stop = input().strip()
# 初始化最小/最大值为停止字符串的反转及原串
min_rev = stop[::-1]
min_str = stop
max_rev = stop[::-1]
max_str = stop

# 逐行读取输入,减少IO调用开销
for line in sys.stdin:
    line = line.rstrip('\n')  # 仅去除换行符,保留原字符串首尾空白
    stripped_line = line.strip()
    if stripped_line == stop:
        break
    # 计算当前字符串的反转
    curr_rev = line[::-1]
    # 更新最小值
    if curr_rev < min_rev:
        min_rev = curr_rev
        min_str = line
    # 更新最大值
    if curr_rev > max_rev:
        max_rev = curr_rev
        max_str = line

print(min_str)
print(max_str)

极致优化版本(批量读取全量输入)

针对超大量输入场景,一次性读取所有输入能进一步降低IO开销:

import sys

def main():
    # 一次性读取所有输入并按行拆分
    all_lines = sys.stdin.read().splitlines()
    stop = all_lines[0].strip()
    min_rev = all_lines[0][::-1]
    min_str = all_lines[0]
    max_rev = all_lines[0][::-1]
    max_str = all_lines[0]

    for line in all_lines[1:]:
        stripped_line = line.strip()
        if stripped_line == stop:
            break
        curr_rev = line[::-1]
        if curr_rev < min_rev:
            min_rev = curr_rev
            min_str = line
        if curr_rev > max_rev:
            max_rev = curr_rev
            max_str = line

    print(min_str)
    print(max_str)

if __name__ == "__main__":
    main()

关键优化点说明

  1. 内存优化:不再创建存储所有输入的列表,仅维护当前最小/最大反转字符串及对应原串,避免大内存占用。
  2. IO优化:使用sys.stdin迭代或一次性读取,替代多次input()调用,减少系统IO的开销(这是竞赛场景下输入量较大时的核心提速点)。
  3. 减少冗余操作:边读取边实时更新最值,无需先收集全量数据再二次遍历反转,减少一次完整的列表遍历与字符串反转操作。

原代码潜在问题修正

原代码中stop未做strip()处理,但后续用line.strip() == stop判断终止,会导致停止字符串首尾有空白时逻辑不一致(比如输入09作为停止符,后续输入09不会触发终止)。优化后的代码统一对stop做strip(),保持逻辑一致性。

内容的提问来源于stack exchange,提问作者Anton

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 19:15:01