frederick99

Word Patterns - II

Jan 19th, 2020
256
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 0.65 KB | None | 0 0
  1. import re
  2. import collections
  3.  
  4. def solve(pattern, string):
  5.   m,k = {},0
  6.  
  7.   reg = ['^']
  8.   for c in pattern:
  9.     if c in m:
  10.       reg.append(f'\\{m[c]}')
  11.     else:
  12.       reg.append('(.+)')
  13.       k += 1
  14.       m[c] = k
  15.   reg.append('$')
  16.  
  17.   m = re.compile(''.join(reg)).match(string)
  18.   if m is None:
  19.     return False
  20.  
  21.   g,s = m.groups(),set()
  22.   return not any(x in s or s.add(x) for x in g)
  23.  
  24.  
  25. tests = [
  26.   ('abab', 'redblueredblue', True),
  27.   ('abbb', 'redblueblueblue', True),
  28.   ('aaaa', 'asdasdasdasd', True),
  29.   ('aabb', 'xyxabcxzyabc', False),
  30.   ('ab', 'aa', False),
  31. ]
  32.  
  33. for p,s,o in tests:
  34.   assert solve(p,s) == o
  35.  
  36. print('Passed!')
Add Comment
Please, Sign In to add comment