给出第一个词 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 由小写英文字母和空格组成
text 中的所有单词之间都由 单个空格字符 分隔
1 <= first.length, second.length <= 10
first 和 second 由小写英文字母组成
#include<iostream>
#include<vector>
#include<unordered_map>
using namespace std;
class Solution {
public:
vector<string> findOcurrences(string text, string first, string second) {
unordered_map<string, bool> hash;
vector<string> vec;
text.push_back(' ');
string key = first + ' ' + second;
cout << "key:" << key << endl;
splitstr(vec, text, key);
return vec;
}
/* 需要算两次 */
void splitstr(vector<string>& vec, string &text, string& key) {
int start = 0;
int laststart = 0;
int index = 0;
string tmpstr;
int count = 0; /* 计算空格的数目 */
for (char c : text) {
if (c == ' ') {
count++;
if (count == 1) {
laststart = index;
}
if (count == 2) {
tmpstr = text.substr(start, index - start);
start = laststart + 1;
laststart = index;
count = 1;
cout << "tmpstr1:" << tmpstr << endl;
findThird(vec, tmpstr, text, key,index);
}
}
index++;
}
}
void findThird(vector<string>& vec, string &tmpstr, string&text, string& key, int index) {
if (tmpstr == key) {
cout << "in" << endl;
for (int i = index + 1; i < text.size(); i++) {
if (text[i] == ' ') {
string third = text.substr(index + 1, i - index - 1);
cout << "third:" << third << endl;
vec.emplace_back(third);
break;
}
}
}
}
};