Bigram 分词

107 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第1天,点击查看活动详情

题目描述

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

思路分析

根据题意可知,规定两个有顺序的字符串,第三个长字符串中找出这两个字符串,出现顺序一定要和规定一样,并且两个字符串也必须是相邻的;在一个长字符串中,如果要从里面取出每个短的字符串出来对比,那么必须要将它转成数组再进行遍历;首先利用数组的split()方法将字符串str转成数组,然后再对数组进行遍历,这里要记住,我们要取到的是遍历项后面的第三个,所以只要遍历到倒数第三个就可以了;遍历时取出遍历项和后面一个字符串跟规定的两个字符串对比,若是全部都相同那么就可以把第三个字符串保留出来,push到原先声明出来的空数组里面去。遍历结束后,数组里面的所有字符串就是我们所需要的答案。

AC代码

let text = "alice is a good girl she is a good student", first = "a", second = "good"
function solution(str, a, b ) {
    let arr = str.split(" ");
    let newArr = [];
    for( let i=0; i<arr.length - 2; i++) {
        if(arr[i] == a && arr[i+1] == b) {
            newArr.push(arr[i+2]);
        }
    }
    console.log(newArr);
}
solution(text, first, second);