难度简单19收藏分享切换为英文接收动态反馈
给出第一个词 first
和第二个词 second
,考虑在某些文本 text
中可能以 "first second third
" 形式出现的情况,其中 second
紧随 first
出现,third
紧随 second
出现。
对于每种这样的情况,将第三个词 "third
" 添加到答案中,并返回答案。
示例 1:
输入:text = "alice is a good girl she is a good student", first = "a", second = "good" 输出:["girl","student"]
示例 2:
输入: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
由小写英文字母组成
难度基本在于如何使用空格分隔为一个一个单词:可以使用这个函数,建议背诵,笔试很多时候会用到
void SplitString(const string& s, vector<string>& v, const string& c)
{
string::size_type pos1, pos2;
pos2 = s.find(c);
pos1 = 0;
while(string::npos != pos2)
{
v.push_back(s.substr(pos1, pos2-pos1));
pos1 = pos2 + c.size();
pos2 = s.find(c, pos1);
}
if(pos1 != s.length())
v.push_back(s.substr(pos1));
}
本题目求解:
class Solution {
public:
void SplitString(const string& s, vector<string>& v, const string& c)
{
string::size_type pos1, pos2;
pos2 = s.find(c);
pos1 = 0;
while(string::npos != pos2)
{
v.push_back(s.substr(pos1, pos2-pos1));
pos1 = pos2 + c.size();
pos2 = s.find(c, pos1);
}
if(pos1 != s.length())
v.push_back(s.substr(pos1));
}
vector<string> findOcurrences(string text, string first, string second) {
vector<string> spilt_s;
SplitString(text, spilt_s, " ");
vector<string> rets;
for(int i=0;i<spilt_s.size()-2;i++)
{
if(spilt_s[i]==first && spilt_s[i+1]==second)
rets.push_back(spilt_s[i+2]);
}
return rets;
}
};