leetcode 1078. Bigram 分词

  • 题目描述
  • 解题思路
  • 执行结果
leetcode 1078. Bigram 分词


题目描述

  1. 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 由小写英文字母组成

解题思路

法1

方法1:字符串分割

第一个词 first 和第二个词 second,然后使用 strings.Split 函数将文本字符串拆分为单词数组 words。

接下来,我们遍历单词数组 words,对于每个位置 i,如果 words[i] 等于 first 且 words[i+1] 等于 second,则将 words[i+2] 添加到结果数组 result 中。

最后,函数返回结果数组 result。

  • 时间复杂度(O(n))
  • 空间复杂度(O(n))

法2

正则表达式:

使用贪婪模式匹配所有匹配结果:

首先构建了一个正则表达式的模式 pattern,使用 fmt.Sprintf 函数将 first 和 second 动态插入到模式中。

然后,我们使用 regexp.MustCompile 函数将模式编译成一个正则表达式对象 re。

接下来,我们使用 re.FindAllStringSubmatch 函数在文本字符串 text 中找到所有与模式匹配的子串。每个匹配结果是一个字符串数组,包含整个匹配和捕获组中的子匹配。

最后,我们将捕获组中的第一个子匹配(即第三个词 third)提取出来,并将其存储在结果数组 result 中。

执行结果

法1

字符串分割

func findOcurrences(text string, first string, second string) []string {

    //字符串分割
 words := strings.Split(text, " ")
 result := make([]string0)
    //检索符合条件
 for i := 0; i < len(words)-2; i++ {
  if words[i] == first && words[i+1] == second {
   result = append(result, words[i+2])
  }
 }
    //返回结果
 return result
}

执行结果: 通过 显示详情 查看示例代码 添加备注

执行用时: 0 ms , 在所有 Go 提交中击败了 100.00% 的用户 内存消耗: 1.9 MB , 在所有 Go 提交中击败了 100.00% 的用户 通过测试用例: 30 / 30 炫耀一下:



本文由 mdnice 多平台发布

你可能感兴趣的:(后端)