1 条题解

  • 0
    @ 2026-9-9 9:14:00

    题解

    思路

    从左到右扫描字符串,用栈记录尚未决定如何删除的结构:状态 11 表示一个可用的 A,状态 22 表示一个已经配成的 AB。

    做法

    读到 A 时压入 11;读到 B 时,弹掉栈顶连续的状态 22,再尝试找到一个状态 11,找到后将它替换为状态 22,否则这个 B 永远无法删除,答案加一;读到 C 时,弹掉栈顶连续的状态 11,再尝试找到状态 22,找到便连同当前 C 一起消去,否则这个 C 永远无法删除,答案加一。

    栈中的状态都可以在之后单独删除或与后续字符配合,不会直接贡献最终长度。一个无法匹配的 B 或 C 会把问题分隔成互不影响的两段,因此立即计入答案是最优的。

    复杂度

    每个状态至多入栈、出栈各一次,单组复杂度为 O(∣S∣)O(|S|),所有测试数据的总复杂度为 O(∑∣S∣)O(\sum |S|),空间复杂度为 O(∣S∣)O(|S|)。

    • 1

    信息

    ID
    1615
    时间
    2000ms
    内存
    1024MiB
    难度
    10
    标签
    递交数
    1
    已通过
    1
    上传者