题解
单词过滤
1 条题解
-
0
解题思路
题目要求把包含
tr的单词过滤掉,留下不含tr的单词。怎么判断一个单词里有没有
tr呢?C++ 的string提供了一个现成的查找函数find:s.find("tr")会返回tr在 s 里第一次出现的位置(从0开始数);- 如果找不到,就返回一个特殊的常量
string::npos。
所以判断条件就是:
s.find("tr") == string::npos,成立就说明这个单词里没有tr,要保留下来输出。输出时要注意空格:用一个
first标记记录"是不是第一个要输出的单词"。第一个单词前面不加空格,之后每个单词前面先输出一个空格。用样例验证:
tree try abandon三个单词:tree里有tr,过滤掉;try里有tr,过滤掉;abandon里没有tr,保留输出。
结果就是
abandon,和样例一致。参考代码
#include <iostream> using namespace std; // 用途:过滤掉所有包含"tr"的单词,输出剩下的单词 int main() { int n; cin >> n; bool first = true; // 标记是否第一次输出,用来控制空格 for (int i = 0; i < n; i++) { string s; cin >> s; // 字符串中没有"tr"(find找不到时返回npos)才保留 if (s.find("tr") == string::npos) { if (!first) cout << ' '; // 不是第一个单词时先输出空格 cout << s; first = false; } } cout << endl; return 0; }复杂度分析
- 时间复杂度:有 n 个单词(最多100个),每个单词长度不超过50。
find最多看遍整个单词,所以总时间是 O(n × 单词长度) ≈ O(n),非常快。 - 空间复杂度:只用一个临时字符串,是 O(1)。
- 1