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

Codeforces String Score问题测试点11超时,求Python代码优化方案

问题分析

你遇到的超时问题核心是原代码的时间复杂度过高,同时存在多处逻辑错误,即便不超时也无法通过测试用例。

原代码核心问题

  • 频繁对列表执行del删除中间元素的操作,每次删除的时间复杂度是O(n),当字符串长度较大时,总时间复杂度会达到O(n²),直接触发超时
  • 逻辑缩进错误:判断字符为Y的代码缩进在W的分支下,永远不会执行
  • 索引逻辑错误:i=0时访问S[i-1]会取到字符串最后一个元素,完全不符合题目要求的从左到右处理规则
  • 核心规则实现缺失:Z的处理逻辑、X的跳过下一个字符逻辑均未正确实现
  • 遍历规则错误:使用固定长度range(N)遍历动态变化的字符串,会出现索引越界、漏处理字符的问题

优化方案

使用双端队列deque存储字符串,deque的左弹出、尾部追加操作时间复杂度均为O(1),每个字符最多入队、出队各一次,总时间复杂度为O(n),完全满足大长度字符串的处理要求。

正确实现代码

from collections import deque

n = int(input())
s = deque(input())
score = 0

while s:
    curr = s.popleft()
    if curr == 'V':
        score += 5
    elif curr == 'W':
        score += 2
    elif curr == 'X':
        # 存在下一个字符时直接跳过
        if s:
            s.popleft()
    elif curr == 'Y':
        # 存在下一个字符时移到末尾
        if s:
            moved = s.popleft()
            s.append(moved)
    elif curr == 'Z':
        if s:
            next_ch = s[0]
            if next_ch == 'V':
                score //= 5
                s.popleft()
            elif next_ch == 'W':
                score //= 2
                s.popleft()

print(score)

逻辑说明

该实现完全贴合题目规则:

  1. 所有字符从左到右依次处理
  2. 当弹出的字符为X/Y/Z且队列已空时,自动跳过后续操作,符合「末尾的X/Y/Z忽略操作」的要求
  3. 所有特殊字符的处理规则均严格按照题目描述实现,没有逻辑偏差

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 18:09:02