Advertisement
Guest User

Untitled

a guest
Nov 18th, 2019
108
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.97 KB | None | 0 0
  1. def match_from_start(string, pattern) -> bool:
  2.     if len(pattern) > len(string):
  3.         return False
  4.     length = len(pattern)
  5.     for i in range(length):
  6.         if not (string[i] == pattern[i] or pattern[i] == '?'):
  7.             return False
  8.     return True
  9.  
  10. def match_from_end(string, pattern) -> bool:
  11.     if len(pattern) > len(string):
  12.         return False
  13.     length = len(pattern)
  14.     for i in range(length):
  15.         if not (string[len(string) - 1 - i] == pattern[len(pattern) - 1 - i] \
  16.             or pattern[len(pattern) - 1 - i] == '?'):
  17.             return False
  18.     return True
  19.  
  20. def matches_pattern(string, pattern) -> bool:
  21.     if pattern == "*":
  22.         return True
  23.  
  24.     if not ('*' in pattern):
  25.         if len(pattern) != len(string):
  26.             return False
  27.         if match_from_start(string, pattern):
  28.             string = string[len(pattern):]
  29.             if string == '':
  30.                 return True
  31.             else:
  32.                 return False
  33.         else:
  34.             return False
  35.  
  36.     subpatterns = pattern.split('*')
  37.     if match_from_start(string, subpatterns[0]):
  38.         string = string[len(subpatterns[0]):]
  39.     else:
  40.         return False
  41.  
  42.     if match_from_end(string, subpatterns[len(subpatterns) - 1]):
  43.         string = string[:len(string) - len(subpatterns[len(subpatterns) - 1])]
  44.     else:
  45.         return False
  46.  
  47.     for subpattern in subpatterns[1:len(subpatterns) - 1]:
  48.         matched = False
  49.         for i in range(len(string) - len(subpattern) + 1):
  50.             if match_from_start(string[i: i + len(subpattern)], subpattern):
  51.                 string = string[i + len(subpattern):]
  52.                 matched = True
  53.                 break
  54.         if not matched:
  55.             return False
  56.  
  57.     return True
  58.  
  59. def main():
  60.     pattern = str(input())
  61.     string = str(input())
  62.     if matches_pattern(string, pattern):
  63.         print("YES")
  64.     else:
  65.         print("NO")
  66.  
  67. if __name__ == '__main__':
  68.     main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement