给出第一个词 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"]
/* 这是我的代码,和大神们的比起来我这个比较中规中举,但是运行部分案例时出错了,报错原因是数组下标溢出了,有知道的大神们麻烦留言,谢谢 */ class Solution { public: vector<string> findOcurrences(string text, string first, string second) { vector<string> result; int length = text.length(); for(int i = 0;i < length;i++) { string subFirst = ""; while(text[i] != ' ' && text[i] != '\n' && i < length) { subFirst += text[i]; i++; } cout << subFirst << endl; if(subFirst == first) { int lenSecondString = second.length(); if(i+lenSecondString < length && i+1 < length) { string subSecond = text.substr(i+1, lenSecondString); if(subSecond == second) { int j = i+2+lenSecondString; string subThird = ""; while(text[j] != ' ' && text[j] != '\n' && j < length) { subThird += text[j]; j++; } result.push_back(subThird); } } } } return result; } };
请看大神们的正确解答:
class Solution { public: vector<string> findOcurrences(string text, string first, string second) { vector<string> result; istringstream ss(text); string subFirstString = ""; string subSecondString = ""; string curString = ""; while(ss>>curString) { //ss会把内容自动匹配到和curString类型相同的内容,这里就是string,就没有什么异样了,空格会作为匹配内容的结束标识 if(subFirstString == first && subSecondString==second) { result.push_back(curString); } subFirstString = subSecondString; subSecondString = curString; } return result; } };