如何在Go语言中找到类似String包含子串subStr字符串

siotufzp  于 2023-02-27  发布在  Go
关注(0)|答案(2)|浏览(113)

我有一个字符串字符串像“汽车”和另一个像“acasras”都包含subStr像“汽车”当删除字符串中一些字符时,我如何在Golang中检查它?我还使用了contain(字符串,subStr),但它只包括像“汽车”这样的字符串,但我也想检测像“acasras”这样的字符串。
三氮杂萘
函数包含(字符串,子字符串)

smtd7mpg

smtd7mpg1#

没有Go语言的strings包函数,你自己写函数吧。
例如,

package main

import "fmt"

func contains(str, subStr string) bool {
    if len(subStr) == 0 {
        return true
    }
    subChars := []rune(subStr)
    sc := 0
    for _, strChar := range str {
        if strChar == subChars[sc] {
            sc++
            if sc >= len(subChars) {
                return true
            }
        }
    }
    return false
}

func main() {
    subStr := "car"
    fmt.Println(subStr)
    str := "cars"
    fmt.Println(str)
    fmt.Println(contains(str, subStr))
    str = "acasras"
    fmt.Println(str)
    fmt.Println(contains(str, subStr))
}

https://go.dev/play/p/PGbrZsZCD1y

car
cars
true
acasras
true
mu0hgdu0

mu0hgdu02#

下面是一个递归的方法:

package main

import (
    "fmt"
    "strings"
)

func main() {
    fmt.Println(isInside("something", "")) // true
    fmt.Println(isInside("acasras", "cars")) // true
    fmt.Println(isInside("acasras", "cacs")) // false
}

func isInside(str, subStr string) bool {
    if len(subStr) == 0 {
        return true
    }
    head := getHead(subStr)
    tail := getTail(subStr)
    if strings.Contains(str, head) {
        return isInside(str[strings.Index(str, head)+1:], tail)
    }
    return false
}

func getHead(s string) string {
    if len(s) == 0 {
        return ""
    }
    return string(s[0])
}

func getTail(s string) string {
    if len(s) == 0 || len(s) == 1 {
        return ""
    }
    return string(s[1:])
}

相关问题