• 1078. Bigram 分词 pboost


    给出第一个词 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;
        }
    };
  • 相关阅读:
    EZOJ #202
    EZOJ #201
    p5156 [USACO18DEC]Sort It Out
    p4363 [九省联考2018]一双木棋chess
    p2150 [NOI2015]寿司晚宴
    p5155 [USACO18DEC]Balance Beam
    p2414 [NOI2011]阿狸的打字机
    实验室断网的解决方案
    人需要看到未来
    门德尔松--罗辑思维
  • 原文地址:https://www.cnblogs.com/boost/p/16633646.html
Copyright © 2020-2023  润新知