1 条题解
-
0
📝 题目大意
给定一个仅包含小写字母和
|的字符串,保证恰好有 2 个|。要求删除这两个|以及它们之间的所有字符,输出剩余部分。💡 解题思路
- 题目分析:字符串长度 ,数据规模极小,直接模拟即可。保证恰好有两个
|,所以无需考虑边界异常。 - 算法推导:
- 用
S.find('|')找到第一个|的位置,记为first。 - 用
S.rfind('|')找到最后一个|的位置,记为last。由于保证恰好有两个|,rfind返回的就是第二个|的位置。 - 使用
S.erase(first, last - first + 1)将从first到last(含两端)的所有字符删除,长度参数为last - first + 1。 - 输出删除后的字符串。
- 用
- 边界与细节:
- 若两个
|相邻(如样例||xyz),last - first + 1 = 2,删除两个|及中间的零个字符,结果正确。 - 若
|位于字符串首尾(如样例|spoiler|),删除后变为空串,输出空行即可。
- 若两个
⏱️ 复杂度分析
- 时间复杂度:,
find、rfind、erase均为线性。 - 空间复杂度:,存储输入字符串。
💻 标准代码 (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
- 上传者