待解决的问题

有一个字符串s,和一个模式串p,查找p出现在s中的位置。

解决思路
  1. s的长度为n,P的长度为m,必须满足n>=m;
  2. 从s的起始位置开始匹配,记录当前位置i,校验s的i->i+m子串与p是否相等,否则s位置前移1(i = i+1)继续匹配,一直尝试到n-m位置;
匹配流程

图片.png

GoLang实现源码:
func ForceSearch(src []byte, patten []byte) int  {
    n := len(src)
    m := len(patten)

    for i := 0; i <= n-m; i++ {

        j := 0

        for ; j < m; j++ {
            if src[i + j] != patten[j] {
                break
            }
        }

        if j == m {
            return i
        }
    }

    return -1
}
算法复杂度

暴力匹配算法是思路简单,时间复杂度O(n*m)。


Jaden
4 声望0 粉丝

勤能补拙是良训,一分辛苦一分才。