题解
查找单词
1 条题解
-
0
解题思路
小童要检查一个单词里有没有出现
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