1 条题解
-
0
思路分析
1. 任务拆解: 在父字符串中查找子字符串出现的所有位置,如果找不到则输出-1。
2. 关键点分析:
- 使用字符串的
find函数来查找子串位置 - 需要从不同位置开始重复查找,直到找不到为止
- 注意输出的是位置编号(从1开始计数)
3. 步骤规划:
- 第一步: 读取父字符串和子字符串。
- 第二步: 先检查子串是否存在于父串中:
- 如果不存在,直接输出-1
- 第三步: 如果存在,使用循环重复查找:
- 从当前位置开始查找子串
- 找到后输出位置(位置+1,因为题目要求从1开始计数)
- 更新查找起始位置为当前找到位置+子串长度,避免重叠查找
- 第四步: 继续查找直到找不到为止。
4. 代码对应:
getline(cin,a);读取父字符串(可能包含空格)cin>>b;读取子字符串a.find(b,q)从位置q开始查找子串bif(a.find(b,q)==-1) cout<<-1;检查是否完全不存在while(a.find(b,q)!=-1)循环查找所有出现位置w=a.find(b,q);记录找到的位置q=w+b.size();更新查找起始位置(跳过已找到的子串)cout<<w+1<<endl;输出位置(转换为从1开始计数)
简单理解: 就像在长文章中用搜索功能找某个词,找到一个就记下位置,然后从这个词后面继续搜索,直到再也找不到为止。
- 使用字符串的
- 1
信息
- ID
- 654
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 6
- 标签
- (无)
- 递交数
- 690
- 已通过
- 212
- 上传者