《LeetCode之每日一题》:247.Bigram 分词

Posted 是七喜呀!

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《LeetCode之每日一题》:247.Bigram 分词相关的知识,希望对你有一定的参考价值。

Bigram 分词


题目链接: Bigram 分词

有关题目

给出第一个词 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 由小写英文字母组成

题解

法一:一次遍历
参考官方题解

class Solution 
public:
    vector<string> findOcurrences(string text, string first, string second) 
        vector<string> words;//将text中的单词取出,存放到words数组中
        int start = 0;
        int len = text.length();
        while(true)
        
            while(start < len && text[start] == ' ')
            
                start++;
            
            //跳出循环时,对应的text[start]为小写字母 或者为 字符串结尾
            if (start >= len)
                break;
            
            int end = start + 1;
            while(end < len && text[end] != ' ')
            
                end++;
            

            //跳出循环时,对应的text[end]为空格
            //单词存放至words数组中
            words.push_back(text.substr(start, end - start));

            start = end + 1;//从text[end]=空格 的下一个位置开始取出单词
        

        vector<string> ret;
        //找出所有满足,first second third的字串,记录third至ret中
        for (int i = 2; i < words.size(); i++)
        
            if (words[i - 2] == first && words[i - 1] == second)
                ret.push_back(words[i]);
        

        return ret;
    
;

以上是关于《LeetCode之每日一题》:247.Bigram 分词的主要内容,如果未能解决你的问题,请参考以下文章

《LeetCode之每日一题》:264.递增的三元子序列

《LeetCode之每日一题》:286.移除链表元素

《LeetCode之每日一题》:287.反转链表

《LeetCode之每日一题》:215.打乱数组

《LeetCode之每日一题》:228.截断句子

《LeetCode之每日一题》:57.完全平方数