GoLang刷题之leetcode

题目44:通配符匹配

题目描述:

给你一个输入字符串 (s) 和一个字符模式 § ,请你实现一个支持 ‘?’ 和 ‘’ 匹配规则的通配符匹配:
‘?’ 可以匹配任何单个字符。
'
’ 可以匹配任意字符序列(包括空字符序列)。
判定匹配成功的充要条件是:字符模式必须能够 完全匹配 输入字符串(而不是部分匹配)。

题解:

func isMatch(s string, p string) bool {
    bs, bp := []byte(s), []byte(p)
    si, pi, match, star := 0,0,0,-1//s元素下标,p元素下标,match正在匹配s中的元素下标,star p中*下标
    for si < len(bs){
        if (pi<len(bp)&&bs[si]==bp[pi]) ||( pi<len(bp)&&bp[pi] == '?'){ //s和p中对应下标元素相同或者p中元素下标为?
            pi++
            si++
        }else if pi<len(bp)&&bp[pi] == '*'{
            star = pi //记录*下标
            match = si
            pi++
        }else if star != -1{
            pi = star+1
            match++
            si = match
        }else{
            return false
        }
    }
    for pi<len(bp) && bp[pi]=='*'{ //上一个循环中确保s遍历完成,但不确保p遍历结束,因此判断p之后的元素是否为*
        pi++
    }
    return pi == len(bp)
}

你可能感兴趣的:(golang,leetcode,算法)