top1编程
← 返回题目
题解

查找单词

1 条题解

  • 0
    @ 2026-8-5 14:38:11

    解题思路

    小童要检查一个单词里有没有出现 ing、er、ly 这三个"小尾巴",出现了就把小尾巴和它第一次出现的位置告诉小童。

    可以想象成在一排小抽屉里找三样东西:红球(ing)、蓝球(er)、绿球(ly)。从最左边的抽屉开始找,第一次找到哪个就把抽屉的编号记下来。

    C++ 的字符串有一个很好用的工具——find 函数:

    • s.find("ing") 会返回 ing 第一次出现的下标(注意:下标从 0 开始数);
    • 如果找不到,就返回 -1。

    题目要求的位置从 1 开始数,所以找到下标 p 之后要输出 p + 1。

    输出顺序是固定的:先检查 ing,再检查 er,最后检查 ly。三个都没有出现,就什么都不输出。

    用样例 waiting 验证一下:ing 从第 5 个字符开始,所以输出 ing 5。

    参考代码

    // 查找单词:查找ing、er、ly是否出现,输出出现的和它第一次出现的位置
    #include <iostream>
    using namespace std;
    int main(){
        string s;
        cin>>s; // 单词不含空格
        int p;
        // 依次查找ing、er、ly,find返回它第一次出现的下标(从0开始)
        // 题目要求的位置从1开始数,所以输出时加1
        p=s.find("ing");
        if(p!=-1) cout<<"ing "<<p+1<<endl;
        p=s.find("er");
        if(p!=-1) cout<<"er "<<p+1<<endl;
        p=s.find("ly");
        if(p!=-1) cout<<"ly "<<p+1<<endl;
        return 0;
    }
    

    复杂度分析

    • 时间复杂度:find 每次最多扫描整个字符串,字符串长度是 n,ing、er、ly 都是固定长度的短串,所以做 3 次查找的总时间还是 O(n)。
    • 空间复杂度:只用了一个字符串变量,是 O(1)。
    • 1