Wildcard Matching

来源:互联网 发布:上海知柚公司官网图片 编辑:程序博客网 时间:2024/05/21 22:50

Implement wildcard pattern matching with support for ‘?’ and ‘*’.

‘?’ Matches any single character.
‘*’ Matches any sequence of characters (including the empty sequence).

The matching should cover the entire input string (not partial).

The function prototype should be:
bool isMatch(const char *s, const char *p)

Some examples:

isMatch("aa","a") → falseisMatch("aa","aa") → trueisMatch("aaa","aa") → falseisMatch("aa", "*") → trueisMatch("aa", "a*") → trueisMatch("ab", "?*") → trueisMatch("aab", "c*a*b") → false

线性时间复杂度

class Solution(object):    def isMatch(self, s, p):        """        :type s: str        :type p: str        :rtype: bool        """        lens = len(s)        lenp = len(p)        indexs = 0        indexp = 0        match = 0        startIdx = -1        while indexs < lens:            if indexp < lenp and ((p[indexp] == '?') or (s[indexs] == p[indexp])):                indexs += 1                indexp += 1            elif indexp < lenp and p[indexp] == '*':                startIdx = indexp                match = indexs                indexp += 1            elif startIdx != -1:                indexp = startIdx + 1                match += 1                indexs = match            else:                return False        while indexp < lenp and p[indexp] == '*':            indexp += 1        return indexp == lenp
0 0
原创粉丝点击