1 条题解
-
0
📝 题目大意
给定一个由小写字母和
.组成的字符串 ,保证 至少包含一个.且不以.结尾。要求输出 中最后一个.之后的部分(即按.分割后的最后一个子串)。💡 解题思路
-
题目分析:
- 字符串长度 ,数据范围极小,任何 算法均可通过。
- 题目保证 至少包含一个
.,且末尾不是.,因此无需处理边界缺失情况。 - 样例提示了
.可能连续出现、可能出现在开头,但这些都不影响"找最后一个."这一核心逻辑。
-
算法推导:
- 核心问题等价于:找到字符串 中最后一个
.的位置,然后输出该位置之后的所有字符。 - 使用
find_last_of('.')找到最后一个.的下标pos。 - 使用
substr(pos + 1)截取从pos + 1到末尾的子串,即为答案。 - 结合题目保证(至少有一个
.且末尾不是.),pos一定存在且pos + 1不会越界。
- 核心问题等价于:找到字符串 中最后一个
-
边界与细节:
- 样例 3(
.z)中.在开头,pos = 0,substr(1)输出z,逻辑正确。 - 样例 4(
..........txt)中连续多个.,find_last_of仍能找到最后一个,逻辑正确。 - 无需额外判断,因为题目已保证输入合法。
- 样例 3(
⏱️ 复杂度分析
- 时间复杂度:,其中 为字符串长度。
find_last_of需要遍历一次字符串。 - 空间复杂度:,存储输入字符串。
💻 标准代码 (C++)
#include <iostream> #include <string> using namespace std; int main() { string S; cin >> S; // 找到最后一个 '.' 的位置 size_t pos = S.find_last_of('.'); // 输出 '.' 之后的所有字符(即最后一个子串) cout << S.substr(pos + 1) << endl; return 0; } -
- 1
信息
- ID
- 778
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- (无)
- 递交数
- 1
- 已通过
- 1
- 上传者