1 条题解

  • 0
    @ 2025-10-26 9:57:00

    思路分析

    1. 任务拆解: 在父字符串中查找子字符串出现的所有位置,如果找不到则输出-1。

    2. 关键点分析:

    • 使用字符串的find函数来查找子串位置
    • 需要从不同位置开始重复查找,直到找不到为止
    • 注意输出的是位置编号(从1开始计数)

    3. 步骤规划:

    • 第一步: 读取父字符串和子字符串。
    • 第二步: 先检查子串是否存在于父串中:
      • 如果不存在,直接输出-1
    • 第三步: 如果存在,使用循环重复查找:
      • 从当前位置开始查找子串
      • 找到后输出位置(位置+1,因为题目要求从1开始计数)
      • 更新查找起始位置为当前找到位置+子串长度,避免重叠查找
    • 第四步: 继续查找直到找不到为止。

    4. 代码对应:

    • getline(cin,a); 读取父字符串(可能包含空格)
    • cin>>b; 读取子字符串
    • a.find(b,q) 从位置q开始查找子串b
    • if(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
    上传者