implement regular expression matching with support for and matches any single character matches zero or more of the preceding element the matching should cover the entire input string not partial the function prototype should be bool ismatchconst char s const char p some examples ismatchaa a false ismatchaa aa true ismatchaaa aa false ismatchaa a true ismatchaa true ismatchab true ismatchaab cab true finds if stra matches strb keyword arguments stra string strb string match empty string with empty pattern match empty string with the previous character has matched and the current one has to be matched two possible matches the same or horizontal look up j 2 not use the character before vertical look up i 1 use at least one character before p a b s 1 0 0 0 a 0 1 0 1 b 0 0 1 1 b 0 0 0 finds if str_a matches str_b keyword arguments str_a string str_b string match empty string with empty pattern match empty string with the previous character has matched and the current one has to be matched two possible matches the same or horizontal look up j 2 not use the character before vertical look up i 1 use at least one character before p a b s 1 0 0 0 a 0 1 0 1 b 0 0 1 1 b 0 0 0
def is_match(str_a, str_b):
    
    len_a, len_b = len(str_a) + 1, len(str_b) + 1
    matches = [[False] * len_b  for _ in range(len_a)]

    
    matches[0][0] = True

    
    for i, element in enumerate(str_b[1:], 2):
        matches[0][i] = matches[0][i - 2] and element == '*'

    for i, char_a in enumerate(str_a, 1):
        for j, char_b in enumerate(str_b, 1):
            if char_b != '*':
                
                
                matches[i][j] = matches[i - 1][j - 1] and \
                                char_b in (char_a, '.')
            else:
                
                
                matches[i][j] |= matches[i][j - 2]

                
                
                
                
                
                
                
                if char_a == str_b[j - 2] or str_b[j - 2] == '.':
                    matches[i][j] |= matches[i - 1][j]

    return matches[-1][-1]