题目
给出第一个词 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”]
理解
同样也是一个字符串的题,在给定的句子里进行检索,要把句子检索完,直到找出所有跟随在first和second后边的third
代码
#include<iostream>
#include<string>
#include<vector>
using namespace std;
class Solution
{
public:
vector<string> findOcurrences(string text, string first, string second)
{
text += " ";
vector<string>results;
vector<string>word;
string temp = "";
int len = text.length();
//遍历句子并存好每一个单词
for (int i = 0; i < len; i++)
{
if (text[i] != ' ')
{
temp += text[i];
}
else
{
word.push_back(temp);
temp = "";
}
}
//容器中单词个数
len = word.size();
for (int i = 0; i < len - 2; i++)
{
if (word[i] == first && word[i + 1] == second)
{
results.push_back(word[i + 2]);
}
}
return results;
}
};
int main()
{
Solution s;
string t = "i am a student am a girl";
vector<string> result;
result= s.findOcurrences(t, "am", "a");
for (int i = 0; i <result.size(); i++)
cout << result[i] << " ";
return 0;
}
总结
这个题还是用了容器,发现很好用,但还是不太会。开始接触时定义是模板,但理解不太深刻。其实是一个动态的可变长数组,可以在尾部插入数据push_back(a),可以插入(insert(vec.begin()+i,a);在第i个元素后面插入a)、
删除(erase(vec.begin()+2);删除第3个元素)数据,通过下标访问数据等。