• 博客园logo
  • 会员
  • 周边
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
p-boost-q
博客园    首页    新随笔    联系   管理    订阅  订阅
1078. 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"]

/*
这是我的代码,和大神们的比起来我这个比较中规中举,但是运行部分案例时出错了,报错原因是数组下标溢出了,有知道的大神们麻烦留言,谢谢
*/
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;
    }
};

 

posted on 2022-08-28 20:59  p-boost-q  阅读(31)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3