题目描述
给出第一个词 first
和第二个词 second
,考虑在某些文本 text
中可能以 “first second third
” 形式出现的情况,其中 second
紧随 first
出现,third
紧随 second
出现。
对于每种这样的情况,将第三个词 “third
” 添加到答案中,并返回答案。
样例
输入:text = "alice is a good girl she is a good student", first = "a", second = "good"
输出:["girl","student"]
输入:text = "we will we will rock you", first = "we", second = "will"
输出:["we","rock"]
注意
1 <= text.length <= 1000
text
由一些用空格分隔的单词组成,每个单词都由小写英文字母组成。1 <= first.length, second.length <= 10
first
和second
由小写英文字母组成。
算法
(暴力枚举) $O(n)$
- 将
text
按照空格分词,然后暴力匹配即可。
时间复杂度
- 每个字母遍历常数次,故时间复杂度为 $O(n)$。
空间复杂度
- 需要额外的数组存放单词和答案,故空间复杂度也为 $O(n)$。
C++ 代码
class Solution {
public:
vector<string> findOcurrences(string text, string first, string second) {
vector<string> t;
string tmp;
for (auto &c : text) {
if (c == ' ') {
t.push_back(tmp);
tmp = "";
}
else {
tmp += c;
}
}
t.push_back(tmp);
vector<string> ans;
for (int i = 0; i < (int)(t.size()) - 2; i++)
if (first == t[i] && second == t[i + 1])
ans.push_back(t[i + 2]);
return ans;
}
};