2 条题解
-
0
📝 题目大意
给定一个长度为 的字符串 ,由
#(有人)和.(无人)组成。统计满足 "座位 和 有人,座位 无人" 的整数 ()的个数。💡 解题思路
-
题目分析:, 仅由
#和.构成。需要统计所有长度为 3 的连续子串中形如#.#的个数。数据范围要求 算法,直接扫描即可。 -
算法推导:
- 遍历 从 到 (对应原题中的座位编号 到 )。
- 对于每个位置 ,检查
s[i] == '#' && s[i + 1] == '.' && s[i + 2] == '#'是否成立。 - 若成立,
ans++。 - 最终输出
ans。
-
边界与细节:
- 当 时,循环条件
i < n - 2不成立,直接输出 ,符合题意(样例 2 中 输出 )。 - 注意字符串下标从 开始,题目中座位编号从 开始,对应关系为
s[i]对应座位 。
- 当 时,循环条件
⏱️ 复杂度分析
- 时间复杂度:,仅需一次线性扫描。
- 空间复杂度:,用于存储字符串 。
💻 标准代码 (C++)
#include <bits/stdc++.h> using namespace std; int n, ans; // n: 字符串长度, ans: 满足条件的个数 string s; // 座位状态字符串 int main () { cin >> n >> s; // 遍历所有可能的 i(对应座位编号 1 到 N-2) for (int i = 0; i < n - 2; i++) // 检查是否满足 #.# 模式 if (s[i] == '#' && s[i + 1] == '.' && s[i + 2] == '#') ans++; printf("%d", ans); return 0; } -
- 1
信息
- ID
- 834
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- (无)
- 递交数
- 5
- 已通过
- 3
- 上传者