1 条题解

  • 0
    @ 2026-6-19 10:30:49

    📝 题目大意

    给定一个仅包含小写字母和 | 的字符串,保证恰好有 2 个 |。要求删除这两个 | 以及它们之间的所有字符,输出剩余部分。

    💡 解题思路

    1. 题目分析:字符串长度 S100|S| \le 100,数据规模极小,直接模拟即可。保证恰好有两个 |,所以无需考虑边界异常。
    2. 算法推导
      • S.find('|') 找到第一个 | 的位置,记为 first
      • S.rfind('|') 找到最后一个 | 的位置,记为 last。由于保证恰好有两个 |rfind 返回的就是第二个 | 的位置。
      • 使用 S.erase(first, last - first + 1) 将从 firstlast(含两端)的所有字符删除,长度参数为 last - first + 1
      • 输出删除后的字符串。
    3. 边界与细节
      • 若两个 | 相邻(如样例 ||xyz),last - first + 1 = 2,删除两个 | 及中间的零个字符,结果正确。
      • | 位于字符串首尾(如样例 |spoiler|),删除后变为空串,输出空行即可。

    ⏱️ 复杂度分析

    • 时间复杂度O(S)O(|S|)findrfinderase 均为线性。
    • 空间复杂度O(S)O(|S|),存储输入字符串。

    💻 标准代码 (C++)

    #include <iostream>
    #include <string>
    using namespace std;
    
    int main() {
        string S;
        cin >> S;
    
        // 找到第一个 '|' 的位置
        int first = S.find('|');
        // 找到最后一个 '|' 的位置(即第二个 '|')
        int last = S.rfind('|');
    
        // 删除从 first 到 last 的所有字符(包括两个 '|')
        S.erase(first, last - first + 1);
    
        cout << S << endl;
        return 0;
    }
    
    • 1

    信息

    ID
    780
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    (无)
    递交数
    1
    已通过
    1
    上传者