1 条题解
-
0
📝 题目大意
给定一个由
.、|、*组成的字符串 ,其中恰好包含 2 个|和 1 个*。判断*是否位于两个|之间,若是输出in,否则输出out。💡 解题思路
- 题目分析:,数据量极小,直接遍历即可。题目保证字符串中恰好有 2 个
|和 1 个*,无需考虑异常情况。 - 算法推导:
- 遍历字符串 ,记录第一个
|的位置first、第二个|的位置second以及*的位置star。 - 判断条件:若
first < star && star < second,说明*在两个|之间,输出in;否则输出out。
- 遍历字符串 ,记录第一个
- 边界与细节:由于题目保证恰好有 2 个
|和 1 个*,first、second、star一定会被赋值,不存在未初始化的情况。|和*的相对位置只有两种情况(*在中间或不在中间),判断区间开闭不影响结果,因为*不会与|重合。
⏱️ 复杂度分析
- 时间复杂度:,只需遍历一次字符串。
- 空间复杂度:,仅使用常数个变量。
💻 标准代码 (C++)
#include <iostream> #include <string> using namespace std; int main() { int N; string S; cin >> N >> S; int first = -1, second = -1, star = -1; // 初始化三个位置标记 for (int i = 0; i < N; i++) { if (S[i] == '|') { if (first == -1) { first = i; // 记录第一个 '|' 的位置 } else { second = i; // 记录第二个 '|' 的位置 } } else if (S[i] == '*') { star = i; // 记录 '*' 的位置 } } // 判断 '*' 是否在两个 '|' 之间 if (first < star && star < second) { cout << "in" << endl; } else { cout << "out" << endl; } return 0; } - 题目分析:,数据量极小,直接遍历即可。题目保证字符串中恰好有 2 个
- 1
信息
- ID
- 709
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- (无)
- 递交数
- 1
- 已通过
- 1
- 上传者