Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- def match_from_start(string, pattern) -> bool:
- if len(pattern) > len(string):
- return False
- length = len(pattern)
- for i in range(length):
- if not (string[i] == pattern[i] or pattern[i] == '?'):
- return False
- return True
- def match_from_end(string, pattern) -> bool:
- if len(pattern) > len(string):
- return False
- length = len(pattern)
- for i in range(length):
- if not (string[len(string) - 1 - i] == pattern[len(pattern) - 1 - i] \
- or pattern[len(pattern) - 1 - i] == '?'):
- return False
- return True
- def matches_pattern(string, pattern) -> bool:
- if pattern == "*":
- return True
- if not ('*' in pattern):
- if len(pattern) != len(string):
- return False
- if match_from_start(string, pattern):
- string = string[len(pattern):]
- if string == '':
- return True
- else:
- return False
- else:
- return False
- subpatterns = pattern.split('*')
- if match_from_start(string, subpatterns[0]):
- string = string[len(subpatterns[0]):]
- else:
- return False
- if match_from_end(string, subpatterns[len(subpatterns) - 1]):
- string = string[:len(string) - len(subpatterns[len(subpatterns) - 1])]
- else:
- return False
- for subpattern in subpatterns[1:len(subpatterns) - 1]:
- matched = False
- for i in range(len(string) - len(subpattern) + 1):
- if match_from_start(string[i: i + len(subpattern)], subpattern):
- string = string[i + len(subpattern):]
- matched = True
- break
- if not matched:
- return False
- return True
- def main():
- pattern = str(input())
- string = str(input())
- if matches_pattern(string, pattern):
- print("YES")
- else:
- print("NO")
- if __name__ == '__main__':
- main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement