字符串匹配算法的案例

假设有且仅有 1 个最大公共子串。比如,输入 a = "13452439", b = "123456"。由于字符串 "345" 同时在 a 和 b 中出现,且是同时出现在 a 和 b 中的最长子串。因此输出 "345"。

func main() {
    a := "123456"
    b := "13452439"
    maxSubStr := ""
    max_len := 0

    for i := 0; i < len(a); i++ {
        for j := 0; j < len(b); j++ {
            if a[i] == b[j] {
                for m, n := i, j; m < len(a) && n < len(b); m, n = m+1, n+1 {
                    if a[m] != b[n] {
                        break
                    }
                    if max_len < m-i+1 {
                        max_len = m - i + 1
                        maxSubStr = a[i : m+1]
                    }
                }
            }
        }
    }
    fmt.Println(maxSubStr)
}

假设要从主串 s = "goodgoogle" 中找到 t = "google" 子串。

func main() {
    s := "goodgoogle"
    t := "google"
    isfind := 0

    for i := 0; i < len(s) - len(t) + 1; i++ {
        if s[i] == t[0] {
            jc := 0
            for j := 0; j < len(t); j++ {
                if s[i + j] != t[j] {
                    break
                }
                jc = j
            }
            if jc == len(t) - 1 {
                isfind = 1
            }
        }
    }
    fmt.Println(isfind)
}

 

posted @ 2020-08-31 17:09  顽强的allin  阅读(303)  评论(0编辑  收藏  举报