给出第一个词 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:字符串分割
第一个词 first 和第二个词 second,然后使用 strings.Split 函数将文本字符串拆分为单词数组 words。
接下来,我们遍历单词数组 words,对于每个位置 i,如果 words[i] 等于 first 且 words[i+1] 等于 second,则将 words[i+2] 添加到结果数组 result 中。
最后,函数返回结果数组 result。
正则表达式:
使用贪婪模式匹配所有匹配结果:
首先构建了一个正则表达式的模式 pattern,使用 fmt.Sprintf 函数将 first 和 second 动态插入到模式中。
然后,我们使用 regexp.MustCompile 函数将模式编译成一个正则表达式对象 re。
接下来,我们使用 re.FindAllStringSubmatch 函数在文本字符串 text 中找到所有与模式匹配的子串。每个匹配结果是一个字符串数组,包含整个匹配和捕获组中的子匹配。
最后,我们将捕获组中的第一个子匹配(即第三个词 third)提取出来,并将其存储在结果数组 result 中。
字符串分割
func findOcurrences(text string, first string, second string) []string {
//字符串分割
words := strings.Split(text, " ")
result := make([]string, 0)
//检索符合条件
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 多平台发布