You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Go语言中检测字符串是否包含指定子序列?

Go语言实现子序列检测函数

你需要的是检测字符串是否包含指定子序列(非连续子串),标准库的strings.Contains只能匹配连续的子串,无法满足需求。这里用双指针法实现一个符合要求的ContainsSubsequence函数:

package main

import "fmt"

func ContainsSubsequence(str, subStr string) bool {
	// 子序列为空直接返回true
	if subStr == "" {
		return true
	}
	subIdx := 0
	for _, char := range str {
		if char == rune(subStr[subIdx]) {
			subIdx++
			// 子序列所有字符都匹配完成
			if subIdx == len(subStr) {
				return true
			}
		}
	}
	// 遍历完原字符串仍未匹配完子序列
	return false
}

func main() {
	testCases := []struct {
		str      string
		subStr   string
		expected bool
	}{
		{"cars", "car", true},
		{"acasras", "car", true},
		{"abc", "acb", false},
		{"", "car", false},
		{"car", "", true},
	}

	for _, tc := range testCases {
		result := ContainsSubsequence(tc.str, tc.subStr)
		fmt.Printf("str: %q, subStr: %q, expected: %t, result: %t\n", tc.str, tc.subStr, tc.expected, result)
	}
}

逻辑说明

  • 用subIdx作为子序列的遍历指针,原字符串通过range逐个遍历字符
  • 当原字符串的字符与子序列当前指针位置的字符匹配时,将子序列指针后移一位
  • 若子序列指针走完整个子序列长度,说明原字符串包含该子序列,返回true
  • 若原字符串遍历完毕,子序列指针仍未走完,则返回false

运行上述代码,"cars"和"acasras"都会正确返回true,完全符合你需要的^c^a^r^模式匹配需求。

内容的提问来源于stack exchange,提问作者amir.wpf

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 22:45:29