题目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 = sipi++}else if star != -1{pi = star+1match++si = match}else{return false}}for pi<len(bp) && bp[pi]=='*'{ //上一个循环中确保s遍历完成,但不确保p遍历结束,因此判断p之后的元素是否为*pi++}return pi == len(bp)}